其他分享
首页 > 其他分享> > ABAC权限控制学习

ABAC权限控制学习

作者:互联网

ABAC模型

什么是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模型

Casbin:https://casbin.org/zh-CN/

定义一个Policy策略,定义一个Matchers匹配规则,通过Request请求参数与Policy策略通过规则进行匹配,获得一个Effect影响,拿到Effect影响的结果,进入Effect影响的表达式,返回一个布尔值

Policy 策略

p={sub, obj, act, eft}

策略(实体,资源,方法,影响)

属性属性名称描述
subsubject访问实体
objobject访问的资源
actaction访问的方式,POST、GET
efteffect策略结果,一般为空,只有两种结果(allow(默认)、deny)
[policy_definition]
p = sub, obj, act, eft
Effect 影响

它决定我们是否可以放行,仅以下几种:

Policy effect意义示例
some(where (p.eft == allow))allow-overrideACL, RBAC, etc.
!some(where (p.eft == deny))deny-overrideDeny-override
some(where (p.eft == allow)) && !some(where (p.eft == deny))allow-and-denyAllow-and-deny
priority(p.eft) || denypriorityPriority
subjectPriority(p.eft)基于角色的优先级主题优先级
[policy_effect]
e = some(where (p.eft == allow))

解释:看看经过匹配规则后的返回值是否等于allow

Request 请求
[request_definition]
r = sub, obj, act

解释:请求入参(实体,资源,方法)

Matchers 匹配规则

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

转载自:https://casbin.org/docs/zh-CN/abac

标签:ABAC,obj,sub,eft,学习,allow,act,权限,where
来源: https://blog.csdn.net/liwenyang1992/article/details/119416244