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 stringOwner string }Casbin模型
Casbin:https://casbin.org/zh-CN/
定義一個Policy策略,定義一個Matchers匹配規則,通過Request請求參數與Policy策略通過規則進行匹配,獲得一個Effect影響,拿到Effect影響的結果,進入Effect影響的表達式,返回一個布爾值
Policy 策略
p={sub, obj, act, eft}
策略(實體,資源,方法,影響)
| sub | subject | 訪問實體 |
| obj | object | 訪問的資源 |
| act | action | 訪問的方式,POST、GET |
| eft | effect | 策略結果,一般為空,只有兩種結果(allow(默認)、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) | 基于角色的優先級 | 主題優先級 |
- e = some(where(p.eft == allow)) 這種情況下 我們的一個matchers匹配完成,得到了allow 那么這條請求將被放行
- e = some(where(p.eft == allow)) && !some(where(p.eft == deny))
解釋:看看經過匹配規則后的返回值是否等于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权限控制学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 危机——疫情是“危”,5G是“机”
- 下一篇: 湖北汽车工业学院c语言,湖北汽车工业学院