赞
踩
什么是ABAC模式?
ABAC是基于属性的访问控制,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。 您之前可能就已经听过 XACML ,是一个复杂的 ABAC 访问控制语言。 与XACML相比,Casbin的ABAC非常简单:在ABAC中,可以使用struct(或基于编程语言的类实例) 而不是字符串来表示模型元素。
例如,ABAC的官方实例如下:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == r.obj.Owner
我们在 matcher 中使用 r.obj.Owner 代替 r.obj。 在 Enforce() 函数中传递的 r.obj 函数是结构或类实例,而不是字符串。 Casbin将使用映像来检索 obj结构或类中的成员变量。
这里是 r.obj construction 或 class 的定义:
type testResource struct {
Name string
Owner string
}
Casbin:https://casbin.org/zh-CN/
定义一个Policy策略,定义一个Matchers匹配规则,通过Request请求参数与Policy策略通过规则进行匹配,获得一个Effect影响,拿到Effect影响的结果,进入Effect影响的表达式,返回一个布尔值
p={sub, obj, act, eft}
策略(实体,资源,方法,影响)
属性 | 属性名称 | 描述 |
---|---|---|
sub | subject | 访问实体 |
obj | object | 访问的资源 |
act | action | 访问的方式,POST、GET |
eft | effect | 策略结果,一般为空,只有两种结果(allow(默认)、deny) |
[policy_definition]
p = sub, obj, act, eft
它决定我们是否可以放行,仅以下几种:
Policy effect | 意义 | 示例 |
---|---|---|
some(where (p.eft == allow)) | allow-override | ACL, RBAC, etc. |
!some(where (p.eft == deny)) | deny-override | Deny-override |
some(where (p.eft == allow)) && !some(where (p.eft == deny)) | allow-and-deny | Allow-and-deny |
priority(p.eft) || deny | priority | Priority |
subjectPriority(p.eft) | 基于角色的优先级 | 主题优先级 |
[policy_effect]
e = some(where (p.eft == allow))
解释:看看经过匹配规则后的返回值是否等于allow
[request_definition]
r = sub, obj, act
解释:请求入参(实体,资源,方法)
Request 和 Policy 的匹配规则
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
解释:进来的实体、资源、方法 能不能在权限表里面找到一致的
r 请求 p 策略
这时候会把 r 和 p 按照上述描述进行匹配,从而返回匹配结果(eft),如果不定义,会返回allow,如果定义过了,会返回我们定义过的那个结果
模型示例:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。