但愿长圆如此夜,人情未必看承别。——辛弃疾《满江红·中秋寄远》
RBAC
model.conf
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
casbin_rule
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
粗略将sub
可以理解为角色、用户,将obj
理解为资源,将act
理解为操作
当sub
为用户时,即用户直接对资源进行授权
当sub
为角色时,即用户分配有某角色,某角色对资源进行授权
从上面的例子可以看出
alice
被授予了对data1
资源的读权限bob
被授予了对data2
资源的写权限data2_admin
被授予了data2
的读写权限,我们可以把data2_admin
可以理解为角色- 将
alice
分配有data2_admin
角色,则alice
此时具有对data2
的读写权限
p:用户、角色
对资源
的授权
g:将用户
分配有角色
组
casbin也支持角色层级g group1 group2
意味着将group1
组分配有group2
组,则group1
组成员包含group2
组的授权策略
RBAC with resource roles
model.conf
[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
casbin_rule
p, bob, data2, write
p, data_group_admin, data_group, write
p, data_group_admin, data_group, read
g, alice, data_group_admin
g2, data1, data_group
g2, data2, data_group
大致与普通rbac类似,使用g2的场景为对资源进行整合
多了两步
data1
,data2
资源分配至data_group
data_group_admin
角色可以对data_group
资源组进行操作
意味着alice
可以对data1
,data2
进行操作
g和g2 不同为 一个为分配有,一个为分配至
文档
https://casbin.org/docs/zh-CN/rbac