我目前正在为Web项目创建一个角色系统(PHP / SQL) 为了启动我,我将有~5个固定角色,可以分配给用户。 然后我获得了很多不同的特权。 现在我必须创建一个表来为不同的角色分配不同的权限,我想知道最好的方法是什么:
1)表格中有这样的列:
id | privilege | sysadmin | editor | ... | guest
0 | db_view | True | False | ... | False
1 | page_edit | True | True | ... | False
...
这似乎是最好的解决方案,只要有五个固定的不同角色,但是当我在将来的版本中将角色系统打开到用户定义的角色时,它仍然是可行的。
2)表格中有这样的列:
id | role | db_view* | page_edit | ... | usermanagement
0 | sysadmin | True | True | ... | True
1 | Editor | False | True | ... | False
...
最后这张表会有很多专栏 - 这是一个好主意吗? 2)带有这样的列的表:
id | role | privilege | Value
0 | sysadmin | page_edit | True
1 | Editor | page_edit | True
2 | sysadmin | dbview | True
3 | Editor | dbview | False
...
这里应该足以为真实的权限创建一个数据集。但它仍然需要一张大桌子。
还有其他方法吗?什么是创建该表最清晰,最灵活的方式?
您在学习数据库设计时学到了哪些方法?
提前感谢任何建议或问题!
答案 0 :(得分:1)
这似乎是多对多关系的经典案例:
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)
在表TblPrivilegesToRoles
中,主键应该是两列。