基本协议是,我们有我们的项目定制“Kickstart中”。 为此,我们正在寻找重做用户控制。 我知道有很多的问题,在那里大约一般的RBAC,但我无法找到任何关于分级RBAC的?
我们的要求是:
- 角色可被分配给组权限
- 如果角色没有权限条目,然后它会自动拒绝
- 用户可以被给予首要权限
- A的用户重写的权限可以是一个授予或拒绝
- 如果用户明确拒绝权限不管说什么样的角色“授予”的覆盖胜。
- 用户可以拥有多个角色
- 角色可以有层次
- 角色可以从其他角色继承(例如“论坛超级版主”的角色是一个“论坛版主”和“系统维护”,和“论坛版主”的角色,从“论坛的”角色已经继承)
- 来自该拒绝或授予特权另一个角色继承角色重写他们的孩子权限
- 权限由“模块”(例如“博客”模块可以有一个“编辑条目”权限和“论坛”模块可以有一个“编辑条目”的许可,他们将不会发生冲突)分组
- 有自动授予完全访问一个“什么都”权限
因此,与闪开这些要求,这里就是我在想这样做的。
表:用户
id | int | unique id
表:角色
id | int | unique id
--------------|---------------------------------------------
title | varchar | human readable name
表:权限
id | int | unique id
--------------|---------------------------------------------
module | varchar | module name
--------------|---------------------------------------------
title | varchar | human readable name
--------------|---------------------------------------------
key | varchar | key name used in functions
表:ROLE_USER
role_id | int | id from roles table
--------------|---------------------------------------------
user_id | int | id from users table
表:Permission_Role
id | int | unique id
--------------|---------------------------------------------
permission_id | int | id from permissions table
--------------|---------------------------------------------
role_id | int | id from roles table
--------------|---------------------------------------------
grant | tinyint | 0 = deny, 1 = grant
表:Permission_User
id | int | unique id
--------------|---------------------------------------------
permission_id | int | id from permissions table
--------------|---------------------------------------------
user_id | int | id from users table
--------------|---------------------------------------------
grant | tinyint | 0 = deny, 1 = grant
好吧,其实这是它的一半,这部分我可以肯定,我被卡住的部分是分层的作用。
所以,我怎么设计呢? 我的想法是对数据库查询,我只是要建立在登录时允许矩阵并将其保存到会话保存这样的查询不必过于简单,因为他们只为每个登录运行一次。
我看到的问题是,我会在我解决继承需要知道角色的层次,所以我可以解决继承的角色的权限。
用户权限是比较容易的部分,每个用户的权限,在本质上是最终解决小组。