数据库布局权限&角色

时间:2015-07-01 08:06:22

标签: php mysql database-design

我目前正在为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
...

这里应该足以为真实的权限创建一个数据集。但它仍然需要一张大桌子。

还有其他方法吗?什么是创建该表最清晰,最灵活的方式?

您在学习数据库设计时学到了哪些方法?

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

1 个答案:

答案 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中,主键应该是两列。