# 工作原理
在 Casbin 中, 訪問控制模型被抽象為基于**PERM**(Policy(策略), Effect(效果), Request(請求), Matcher(匹配器))的一個文件。 因此,切換或升級項目的授權機制與修改配置一樣簡單。 您可以通過組合可用的模型來定制您自己的訪問控制模型。 例如,您可以在一個model中獲得RBAC角色和ABAC屬性,并共享一組policy規則。
Casbin中最基本、最簡單的model是ACL。ACL中的model CONF為:
~~~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 == p.sub && r.obj == p.obj && r.act == p.act
~~~
ACL model的示例policy如下:
~~~
p, alice, data1, read
p, bob, data2, write
~~~
這表示:
* alice可以讀取data1
* bob可以編寫data2
對于過長的單行配置,您也可以通過在結尾處添加“\\”進行斷行:
~~~ini
# 匹配器
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
~~~
此外,對于 ABAC,您在可以在 Casbin **golang**版本中嘗試下面的 (jCasbin 和 Node-Casbin 尚不支持)操作:
~~~ini
# 匹配器
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
~~~
但是你應確保數組的長度大于**1**,否則的話將會導致 panic 。
對于更多操作,你可以查看[govaluate](https://github.com/Knetic/govaluate)。