ABAC权限控制学习
ABAC模型
什么是ABAC模式?
ABAC是基于屬性的訪問控制,可以使用主體、客體或動(dòng)作的屬性,而不是字符串本身來控制訪問。 您之前可能就已經(jīng)聽過 XACML ,是一個(gè)復(fù)雜的 ABAC 訪問控制語言。 與XACML相比,Casbin的ABAC非常簡(jiǎn)單:在ABAC中,可以使用struct(或基于編程語言的類實(shí)例) 而不是字符串來表示模型元素。
例如,ABAC的官方實(shí)例如下:
[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我們?cè)?matcher 中使用 r.obj.Owner 代替 r.obj。 在 Enforce() 函數(shù)中傳遞的 r.obj 函數(shù)是結(jié)構(gòu)或類實(shí)例,而不是字符串。 Casbin將使用映像來檢索 obj結(jié)構(gòu)或類中的成員變量。
這里是 r.obj construction 或 class 的定義:
type testResource struct {Name stringOwner string }Casbin模型
Casbin:https://casbin.org/zh-CN/
定義一個(gè)Policy策略,定義一個(gè)Matchers匹配規(guī)則,通過Request請(qǐng)求參數(shù)與Policy策略通過規(guī)則進(jìn)行匹配,獲得一個(gè)Effect影響,拿到Effect影響的結(jié)果,進(jìn)入Effect影響的表達(dá)式,返回一個(gè)布爾值
Policy 策略
p={sub, obj, act, eft}
策略(實(shí)體,資源,方法,影響)
| sub | subject | 訪問實(shí)體 |
| obj | object | 訪問的資源 |
| act | action | 訪問的方式,POST、GET |
| eft | effect | 策略結(jié)果,一般為空,只有兩種結(jié)果(allow(默認(rèn))、deny) |
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) | 基于角色的優(yōu)先級(jí) | 主題優(yōu)先級(jí) |
- e = some(where(p.eft == allow)) 這種情況下 我們的一個(gè)matchers匹配完成,得到了allow 那么這條請(qǐng)求將被放行
- e = some(where(p.eft == allow)) && !some(where(p.eft == deny))
解釋:看看經(jīng)過匹配規(guī)則后的返回值是否等于allow
Request 請(qǐng)求
[request_definition] r = sub, obj, act解釋:請(qǐng)求入?yún)?#xff08;實(shí)體,資源,方法)
Matchers 匹配規(guī)則
Request 和 Policy 的匹配規(guī)則
[matchers] m = r.sub == p.sub && r.obj == p.obj && r.act == p.act解釋:進(jìn)來的實(shí)體、資源、方法 能不能在權(quán)限表里面找到一致的
r 請(qǐng)求 p 策略
這時(shí)候會(huì)把 r 和 p 按照上述描述進(jìn)行匹配,從而返回匹配結(jié)果(eft),如果不定義,會(huì)返回allow,如果定義過了,會(huì)返回我們定義過的那個(gè)結(jié)果
模型示例:
[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轉(zhuǎn)載自:https://casbin.org/docs/zh-CN/abac
總結(jié)
以上是生活随笔為你收集整理的ABAC权限控制学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 危机——疫情是“危”,5G是“机”
- 下一篇: U盘坏了数据可以恢复吗?超详细的U盘数据