这在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时,他们如何创建具有这些权限的管理员?
请用正确的设计帮助我 .
以下是我到目前为止的设计 .
用户
UserID RoleID
角色
RoleID RoleName
允许
PermissionID PermissionName
ROLE_PERMISSION RoleID PermissionID
谢谢 .
3 回答
这是一个加载的问题,设置成员,角色等是不小的壮举 . 我建议你看看已经写好的库,看看它们是否适合你的需求 . 您应该开始使用Google搜索的内容,简称为“访问控制列表”(acl) .
一旦设计了这样的数据库;
我安装了一些论坛,门户和CMS脚本,并分析了他们如何处理这种情况,然后提取数据库模式并将其用作参考 .
可能这可以帮助
您应该查看授权框架和标准,例如XACML - XACML允许您基于多个属性定义授权,这样您就不会最终陷入角色爆炸 . 因此,您可以创建规则,而不是创建角色manager_in_tx_with_gold_status,例如:
还有几种供应商解决方案和开源解决方案 . 查看Wikipedia页面和标准主页以获取更多信息:
http://en.wikipedia.org/wiki/XACML
https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml
我也有一个关于XACML的Youtube Channels :