如何设计用户,角色和权限架构?

时间:2012-02-17 04:07:32

标签: database permissions user-roles

这是Web应用程序开发中非常常见的事情。我做了很多次。

但我陷入了当前为此设计架构的项目中。

问题是我的应用程序将在开始时有三种类型的用户。 SuperAdmin,Admin和普通用户。

我打算将这些用户类型作为ROLE_SUPERADMIN,ROLE_ADMIN和ROLE_USER等角色。

系统可以有很多角色。事实上,SuperAdmin和Admins创建角色并将这些角色分配给用户。

问题是,

超级管理员将拥有权限p1,p2和p3。 超级管理员可以创建其他超级管理员。 超级管理员可以创建管理员。 超级管理员不会在系统中添加用户。

管理员可以拥有权限p5,p6和p7。 管理员无法创建其他管理员。 管理员可以创建其他用户。 管理员还可以创建“报告查看者”等角色。

拥有权限p1,p2和p3的超级管理员应该能够创建具有权限p5,p6和p7的管理员。我不太了解。

逻辑上,当Super admmins自己没有权限p5,p6和p7时,他们如何创建具有这些权限的管理员?

请用正确的设计帮助我。

以下是我到目前为止的设计。

USER
UserID RoleID

ROLE
RoleID RoleName

PERMISSION
PermissionID PermissionName

ROLE_PERMISSION  RoleID PermissionID

感谢。

3 个答案:

答案 0 :(得分:2)

这是一个加载的问题,设置成员,角色等等都是不小的壮举。我建议你看看已经写好的库,看看它们是否适合你的需求。您应该开始使用Google搜索的内容,简称为“访问控制列表”(acl)。

答案 1 :(得分:2)

设计这样的数据库后;

我安装了一些论坛,门户和CMS脚本,并分析了他们如何处理这种情况,然后提取数据库模式并将其用作参考。

可能这可以帮助

答案 2 :(得分:2)

您应该查看授权框架和标准,例如XACML - XACML允许您根据多个属性定义授权,这样您就不会在角色爆炸中结束。因此,您可以创建规则,而不是创建角色manager_in_tx_with_gold_status,例如:

  

具有role = manager和location = TX的用户可以执行action = view on resources ....

还有一些供应商解决方案和开源解决方案。查看维基百科页面和标准主页以获取更多信息:

我也有一个关于XACML的Youtube频道: