是否可以在数据库用户表中保存用户70权限?

Acc*_*t م 2 php mysql sql

我目前正在开发我的第一个认真的 Web应用程序(它是一个ERP系统).我现在正在管理系统中的权限功能,我正计划将权限与用户表中的用户数据一起保存.但我拥有超过70个可以授予用户的权限.在我的短暂体验之前,我从未遇到过这么大的桌子,我不知道后来当我将系统投入生产时可能会产生什么后果,我也知道如果我做错了我将很难在以后编辑应用程序,所以我认为这将是好的如果我在开始这样做之前问过这里.

可以像这样更换表格

CREATE TABLE `user` (
  `id` int(6) unsigned NOT NULL,
  `name` varchar(70) NOT NULL,
  `type` ENUM('admin','user'),
  PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)

并添加这样的约70列

`p_insertSales` TINYINT(1) NOT NULL,
`p_insertPurchases` TINYINT(1) NOT NULL,
`p_insertCollections` TINYINT(1) NOT NULL,
`p_deleteSales` TINYINT(1) NOT NULL,
`p_deletePurchases` TINYINT(1) NOT NULL,
`p_manageInventory` TINYINT(1) NOT NULL,
`p_insertEntries` TINYINT(1) NOT NULL,
`p_manageAccountingSystem` TINYINT(1) NOT NULL,
`p_deleteEntries` TINYINT(1) NOT NULL,
`p_approveEntries` TINYINT(1) NOT NULL,
`p_seeFinancialReports` TINYINT(1) NOT NULL,
`p_seeLedger` TINYINT(1) NOT NULL,
`p_manageCashAccounts` TINYINT(1) NOT NULL,
`p_insertCurrentAccounts` TINYINT(1) NOT NULL,
`p_seeVisitorsMessages` TINYINT(1) NOT NULL,
`p_seePurchaseOrders` TINYINT(1) NOT NULL,

 -- ... more than 60 more privileges.
Run Code Online (Sandbox Code Playgroud)

在性能和软件设计方面可以做到这一点吗?

因为我发现这样做对我来说更容易维护,因为我在前端控制器区域的请求处理开始时无论如何都在加载客户端数据我可以稍后更改权限(通过添加新权限或删除)地点.

Gor*_*off 8

可能不是一个好主意.你应该有一个每个权限有一行的表:

create table Privileges (
    privilegeId int auto_increment primary key,
    name varchar(255)
);
Run Code Online (Sandbox Code Playgroud)

和一个联结表:

create table UserPrivileges (
    userId int not null,
    privilegeId not null,
    constraint fk_UserPrivileges_userid foreign key (userid) references users(userid),
    constraint fk_UserPrivileges_privileges id foreign key (privilegeid) references users(userid)
);
Run Code Online (Sandbox Code Playgroud)

这些表可以包含其他列.例如,Privileges可能有关于权限的其他信息. UserPrivileges可能有插入/更新日期以及谁进行了更改.

这种结构可以很容易地:

  • 添加新权限
  • 删除现有权限(作为类)
  • 添加和删​​除现有用户的权限

  • 我是同样的解决方案的中间答案.这是一种很好的做法,因为正如G所说,你可以修改特权列表.就个人而言,我还要在`UserPriviledges`表中添加`validfrom`和`validto`以允许记录历史记录 (2认同)