数据库布局权限和角色

Database Layout Privileges & Roles

我目前正在为 Web 项目创建角色系统 (PHP/SQL) 首先,我将拥有~5 个可以分配给用户的固定角色。 然后我得到了很多不同的特权。 现在我必须创建一个 table 来为不同的角色分配不同的权限,我想知道最好的方法是什么:

1) Table 具有这样的列:

id  | privilege | sysadmin | editor | ... | guest

0   | db_view   | True     | False | ... | False
1   | page_edit | True     | True  | ... | False
...

这似乎是最好的解决方案,只要固定只有五个不同的角色,但是当我在未来的版本中将角色系统开放给用户自定义角色时是否仍然可行。

2) Table 具有这样的列:

id  | role      | db_view* | page_edit | ... | usermanagement

0   | sysadmin  | True     | True      | ... | True
1   | Editor    | False    | True      | ... | False
...

最后这个 table 将有大量的列 - 这是个好主意吗? 2) Table 像这样的列:

id  | role      | privilege | Value

0   | sysadmin  | page_edit | True
1   | Editor    | page_edit | True
2   | sysadmin  | dbview    | True
3   | Editor    | dbview    | False
...

在这里,只为真实的权限创建一个数据集应该就足够了。但这仍然需要很大的 table.


还有别的办法吗?创建 table 的最清晰、最灵活的方法是什么?

你在学习数据库设计的时候是通过什么方式学习的?

提前感谢您提出任何建议或问题!

这似乎是多对多关系的经典案例:

TblPrivileges
-------------
Privilege_Id (primary key)
Privilege_name
Other privileges related data

TblRoles
--------
Role_Id (primary key)
Role_Name
Other role related data

TblPrivilegesToRoles
--------------------
PTR_Privilege_Id (reference privilege id in tblPrivileges)
PTR_Role_Id (reference role id in tblRoles)

在table中TblPrivilegesToRoles主键应该是两列。