目 录CONTENT

文章目录

Casbin 基础的RBAC和RBAC+资源组角色模型

Hello!你好!我是村望~!
2023-06-08 / 0 评论 / 0 点赞 / 302 阅读 / 1,237 字
温馨提示:
我不想探寻任何东西的意义,我只享受当下思考的快乐~

基础RBAC模型

之前入门的时候,定义的政策都是具体到人的

p, 张三, 李四, 杀掉
p, 王五, 赵六, 诈骗

p, 刘大脑袋,宋小宝,请吃饭,allow
p, 刘大脑袋,宋小宝,请吃饭,deny

但是法律法规不会为单独每一个人定制!而是为人类 这个主题去定制!比如上面的法律正常来说应该是一个人对另一个人实行了杀掉的动作!我们就判决他违法了!

这里的 ‘人’ 可以理解为一个角色!而张三就是属于‘人’这个角色!

下面展示了一个最基础的RBAC的 [role_definition]

[role_definition]
g = _, _

g = _, _ 通常的来表示两个参数!分别是具体的人,和这个人的角色!

到时候要把Request的请求参数传入进来,来表示人和角色!

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

g(r.sub, p.sub) 这里规则中他会去政策中找!请求的r.sub和政策的p.sub是不是有匹配上的

所以为了能让其匹配上,政策文件一般内部会定义一个 g 在这里的话类似于下面的样子

p, 人, 李四, 杀掉
p,人, 赵六, 诈骗
g,张三,人

g,张三,人 可以理解为一个角色户口本!登记张三的角色为人!

如果此时的请求为 张三,李四,杀掉

那么他先回去查张三是不是 ,查到是人! 人杀掉赵四就是违法了!所以符合违法行为!

image-20230607121844470

主体角色+资源角色的RBAC (RBAC with resource roles)

上面我们看的是,对主体进行角色的划分!其实还是不太够的!因为大部分刑法政策中的受害者也不会具体写某一个人的名字!一般都是比如 人 杀 人 这样的记录就说明满足了刑法判决条件!

所以这里我们也要给Obj划分角色!

定义 role_definition g2 就是我们用来定义资源角色的!同样的两个参数用来绑定具体的人和他的角色 例如:g2 = 张三,人

[role_definition]
g = _, _
g2 = _, _

matcher 审判规则加一下 g2 角色的规则将规则给policy

[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act

下一步政策中要满足规则中的 g2 资源角色!同样的登记一下资源户口

p, 人, 人, 杀掉
p,人, 人, 诈骗
p,人,熊猫,杀掉
p,人,鸡,杀掉,deny
g,张三,人
g2,赵四,人
g2,甜甜,熊猫
g2,kun,鸡

这里我们人杀掉人活着人杀掉熊猫都是构成违法滴!但是人杀鸡是不犯法的!

image-20230607160812499

  • g主体角色张三为人,资源角色赵四为人,杀掉 为true!
  • g主体角色张三为人,资源角色甜甜为熊猫,杀掉 为true!
  • g主体角色张三为人,资源角色kun为鸡,杀掉为false!

g 是主体 登记册记录了主体的角色 g2是资源登记册记录了资源的角色!

使用一个系统管理中的demo

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _
g2 = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act

Policy 内部有sys_data_group 系统角色级别的数据可以操作用户,有work_data_group业务角色级别的数据!

而且也定义了 sys_group_adminsys_data_group有写入+删除的权限,同时 sys_group_adminwork_data_group有删除和写入的权限!

work_group_admin 只对 work_data_group有写入和删除的权限!

p, sys_group_admin, user, delete
p, work_group_admin, shop, write

p,sys_group_admin,sys_data_group,write
p,sys_group_admin,sys_data_group,delete
p,sys_group_admin,work_data_group,write
p,sys_group_admin,work_data_group,delete

p,work_group_admin,work_data_group,write
p,work_group_admin,work_data_group,delete

g, marry, sys_group_admin
g, tom,   work_group_admin
g2,user, sys_data_group
g2, shop, work_data_group

g 定义了一些主体角色 :marry 是sys_group_admin级别的角色!tom 是 work_group_admin 的角色!

g2 定义了资源角色!user是系统界别的数据角色!shop 是业务级别的数据角色!

然后传一些Request

marry,user,write
marry,user,delete
marry,shop,write
marry,shop,delete
tom,user,write
tom,user,delete
tom,shop,write
tom,shop,delete

marry 是拥有最高权限的sys_group_admin角色的人!所以她对user shop的权限判定应该都为true!

tom是work_group_admin 只对work_data_groupwritedelete的权利!

image-20230608102927400

0

评论区