当前位置:   article > 正文

ABAC权限控制学习_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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

我们在 matcher 中使用 r.obj.Owner 代替 r.obj。 在 Enforce() 函数中传递的 r.obj 函数是结构或类实例,而不是字符串。 Casbin将使用映像来检索 obj结构或类中的成员变量。

这里是 r.obj construction 或 class 的定义:

type testResource struct {
    Name  string
    Owner string
}
  • 1
  • 2
  • 3
  • 4
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
  • 1
  • 2
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)基于角色的优先级主题优先级
  • e = some(where(p.eft == allow)) 这种情况下 我们的一个matchers匹配完成,得到了allow 那么这条请求将被放行
  • e = some(where(p.eft == allow)) && !some(where(p.eft == deny))
[policy_effect]
e = some(where (p.eft == allow))
  • 1
  • 2

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

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

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

Matchers 匹配规则

Request 和 Policy 的匹配规则

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
  • 1
  • 2

解释:进来的实体、资源、方法 能不能在权限表里面找到一致的

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号