如何设计用户、角色和权限架构?
Posted
技术标签:
【中文标题】如何设计用户、角色和权限架构?【英文标题】:How to design Users, Roles and permission schema? 【发布时间】:2012-03-08 12:40:48 【问题描述】:这在 web 应用程序开发中是很常见的事情。我已经做过很多次了。
但我被困在我当前为此设计架构的项目中。
问题是我的应用程序一开始会有三种类型的用户,例如超级管理员、管理员和普通用户。
我计划将这些用户类型设置为 ROLE_SUPERADMIN、ROLE_ADMIN 和 ROLE_USER 等角色。
系统可以有很多角色。事实上,SuperAdmin 和 Admins 创建角色并将这些角色分配给用户。
问题是,
超级管理员将拥有 p1、p2 和 p3 的权限。 超级管理员可以创建其他超级管理员。 超级管理员可以创建管理员。 超级管理员不会在系统中添加用户。
管理员可以拥有 p5、p6 和 p7 权限。 管理员无法创建其他管理员。 管理员可以创建其他用户。 管理员还可以创建诸如报告查看者之类的角色。
具有 p1、p2 和 p3 权限的超级管理员应该能够创建具有 p5、p6 和 p7 权限的管理员。我不太明白。
逻辑上当超级管理员自己没有p5、p6、p7权限时,如何创建拥有这些权限的管理员?
请帮助我进行正确的设计。
以下是我目前的设计。
用户 UserID RoleID
角色 RoleID 角色名称
许可 PermissionID 权限名称
ROLE_PERMISSION RoleID PermissionID
谢谢。
【问题讨论】:
还没有 cmets。我认为这在 Web 应用程序开发中很常见。过去一定有人遇到过这种情况。请帮忙。 这真是令人失望。这些天您在 SO 上提出的大多数问题仍未得到解答。即使在给予赏金之后。 :( 你好?有人请回复。 你的问题标题不会吸引任何人:P,首先阅读指南如何提问 @Ravi。好的,所以我编辑了我的问题标题。但它确实引起了你的注意。不过没关系 :-) 有什么想法吗? 【参考方案1】:这是一个加载的问题,设置成员、角色等是不小的壮举。我建议您查看已经编写的库,看看它们是否适合您的需求。您应该开始搜索的是“访问控制列表”(acl)的简称。
【讨论】:
【参考方案2】:您应该研究授权框架和标准,例如 XACML - XACML 允许您根据多个属性定义授权,这样您就不会最终导致角色爆炸。因此,您可以创建规则,而不是创建角色 manager_in_tx_with_gold_status,例如:
具有 role=manager 和 location=TX 的用户可以对资源执行 action=view....
也有多种供应商解决方案和开源解决方案。查看 Wikipedia 页面和标准主页了解更多信息:
http://en.wikipedia.org/wiki/XACML https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml我也有一个谈论 XACML 的 Youtube 频道:
http://www.youtube.com/user/axiomaticsab?feature=watch【讨论】:
【参考方案3】:曾经设计过这样的数据库;
我安装了一些论坛、门户和 CMS 脚本并分析了它们如何处理这种情况,然后提取了 DB 模式并将它们用作参考。
这可能会有所帮助
【讨论】:
以上是关于如何设计用户、角色和权限架构?的主要内容,如果未能解决你的问题,请参考以下文章