RBAC学习(四)
参考文档:https://my.oschina.net/u/1388595/blog/5165558
1.数据规则
从下面几个维度来控制数据访问权限:
- 销售人员只能看自己的数据(订单数据?)
- 各大区销售经理只能看各地区的数据
- 财务人员只能看金额小于1w的数据
这样数据规则的几个重点要素也清晰了,就是规则字段,规则表达式,规则值。
以上三个场景对应的规则如下:
- 规则字段:创建人, 规则表达式:
=
,规则值:当前登录人 - 规则字段:所属大区,规则表达式:
=
,规则值:安徽大区 - 规则字段:销售金额,规则表达式:
<
,规则值:10000
| 名称 | 类型 | 字段名 |
| ------------ | ------------ | ------------ |
| 规则id | varchar(100) | rule_id |
| 规则名称 | varchar(100) | rule_name |
| 规则表达式 | varchar(50) | rule_conditions |
| 规则值 | varchar(100) | rule_value |
说明:
条件表达式:大于/大于等于/等于/小于等于/包含/模糊/不等于
规则值:指定值(固定值/系统上下文变量)
2.关联资源、用户
2.1 规则与资源做关联
光有规则还不够,还需要把规则和资源跟用户进行绑定,permission表和rule表之间做一个中间表:
名称 | 类型 | 字段名 |
---|---|---|
id | varchar(100) | id |
规则id | varchar(100) | rule_id |
权限id | varchar(100) | perms_id |
在应用设计上需要一个单独的数据规则管理功能,方便录入数据规则,然后在资源管理界面(比如角色权限配置页面)寻找内置的数据规则进行资源与规则的绑定。
2.2 规则与角色做关联
在角色和资源(权限)的中间表role_permission表的基础上添加一个规则id字段
(感觉这么设计有点问题)
名称 | 类型 | 字段名 |
---|---|---|
id | varchar(100) | id |
角色id | varchar(100) | role_id |
权限id | varchar(100) | perms_id |
规则id(如果有多个用 | 分开) | varchar(100) |
一个角色有多个权限,一个角色对一个权限有多个规则(这不合理,如果规则之间冲突咋办,重复。比如说比如说一个地区经理查看订单数据,只能看自己地区的+金额限制?)。一个权限也对应多个规则?(还是刚才的疑问) |
规则组:多个规则,AND
进行连接。