C

Casbin 理解

Yuming 代码 2021-12-31

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为角色时,即用户分配有某角色,某角色对资源进行授权

从上面的例子可以看出

  1. alice被授予了对data1资源的读权限
  2. bob被授予了对data2资源的写权限
  3. data2_admin被授予了data2的读写权限,我们可以把data2_admin可以理解为角色
  4. 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的场景为对资源进行整合
多了两步

  1. data1data2资源分配至data_group
  2. data_group_admin角色可以对data_group资源组进行操作
    意味着alice可以对data1data2进行操作
g和g2 不同为 一个为分配有,一个为分配至

文档

https://casbin.org/docs/zh-CN/rbac

PREV
Golang 通过通道控制携程数量
NEXT
Golang Defer 理解

评论(0)

发布评论