Casbin 中最核心的三個概念:`Model`, `Policy`, `Enforcer`。
`Model`就是一個`CONF`文件,基于PERM metamodel (Policy, Effect, Request, Matchers)。
`Policy`是動態存儲`policy rules`的,可以存在`.csv`文件或數據庫中。
`Enforcer`決定一個"subject"對一個"object"是否有"action"的權限。
#### 安裝
通過composer安裝:
```
composer require casbin/casbin
```
#### 小試牛刀
創建 `model.conf` 和 `policy.csv` 文件:
`model.conf`:
```
[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
```
`policy.csv`:
```
p, alice, data1, read
p, bob, data2, write
```
創建一個Casbin決策器需要有一個模型文件和策略文件為參數:
```php
require_once './vendor/autoload.php';
use Casbin\Enforcer;
$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
```
在需要進行訪問控制的位置,通過以下代碼進行權限驗證:
```php
$sub = "alice"; // the user that wants to access a resource.
$obj = "data1"; // the resource that is going to be accessed.
$act = "read"; // the operation that the user performs on the resource.
if ($e->enforce($sub, $obj, $act) === true) {
// 允許 alice 讀取 data1
} else {
// 拒絕請求, 顯示錯誤
}
```