优先级模型

Casbin支持参考优先级加载策略。

####通过隐式优先级加载策略
这非常简单,顺序决定了策略的优先级,策略出现的越早优先级就越高。

model.conf:

[policy_effect]
e = priority(p.eft) || deny

通过显式优先级加载策略

另见: casbin#550
策略的第一个要素一定是优先级,并且优先级值较小的将具有较高的优先地位。 如果优先级有非数字字符,它将是被排在最后,而不是导致报错。 现在,明确的优先级仅支持 添加策略 & 添加策略,如果 升级策略 被调用,那么您不应该改变优先级属性。

model.conf:

[request_definition]
r = sub, obj, act

[policy_definition]
p = priority, sub, obj, act, eft

[role_definition]
g = _, _

[policy_effect]
e = priority(p.eft) || deny

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

policy.csv

p, 10, data1_deny_group, data1, read, deny
p, 10, data1_deny_group, data1, write, deny
p, 10, data2_allow_group, data2, read, allow
p, 10, data2_allow_group, data2, write, allow


p, 1, alice, data1, write, allow
p, 1, alice, data1, read, allow
p, 1, bob, data2, read, deny

g, bob, data2_allow_group
g, alice, data1_deny_group

请求:

alice, data1, write --> true // `p, 1, alice, data1, write, allow` 拥有最高级的优先权
bob, data2, read --> false
bob, data2, write --> true // 对于bob是 `data2_allow_group` 的角色可以写入data2,而且没有具有更高优先级的否认策略
最后编辑: kuteng  文档更新时间: 2021-06-22 19:03   作者:kuteng