🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# ABAC ## 什么是ABAC模式? ABAC是`基于属性的访问控制`,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。 您之前可能就已经听过 XACML ,是一个复杂的 ABAC 访问控制语言。 与XACML相比,Casbin的ABAC非常简单: 在ABAC中,可以使用struct(或基于编程语言的类实例) 而不是字符串来表示模型元素。 例如,ABAC的官方实例如下: ~~~ini [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 ~~~ 我们使用`r.obj.所有者`代替`r.obj`matcher。 在`Enforce()`函数中传递的`r.obj`函数是结构或类实例,而不是字符串。 Casbin将使用映像来检索`obj`结构或类中的成员变量。 这里是`r.obj`construction 或 class 的定义: ~~~go type testResource struct { Name string Owner string } ~~~ ## 如何使用ABAC? 简单地说,要使用ABAC,您需要做两件事: 1. 在模型匹配器中指定属性。 2. 将元素的结构或类实例作为Casbin的`Enforce()`的参数传入。 Note: 1. 目前,仅请求元素,例如`r.such`、\[`r.obj`,\]`r.action`等等支持ABAC的元素。 您不能在策略元素上使用它,比如`p.sub`,因为在Casbin的策略中没有定义结构或者类。 2. 您可以在一个matcher中使用多个ABAC属性,例如:`m = r.sub.Domain == r.obj.Domain`。