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

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 模式并将它们用作参考。

这可能会有所帮助

【讨论】:

以上是关于如何设计用户、角色和权限架构?的主要内容,如果未能解决你的问题,请参考以下文章

前后端分离如何做权限控制设计?

[数据库设计]用户和角色:通用权限管理系统数据库表结构如何设计?

用户和角色:通用权限管理系统数据库表结构如何设计?

基于项目的角色的数据库设计

用户,权限,角色表怎么设计

用户角色权限数据库设计