概述
在Casbin
中,适配器(adapter
,Casbin
的中间件)实现了policy
规则写入持久层的细节。 Casbin
的用户可以调用adapter
的loadPolicy()
方法从持久层中加载policy
规则, 同样也可以调用savePolicy()
方法将Policy
规则保存到持久层中。 为了保持代码轻量, 我们没有将adapter
的代码放在主库中。
内置的File adapter
文件适配器,是将Policy策略存储在.csv的文件中:
$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
也可以先初始化Adapter:
use Casbin\Persist\Adapters\FileAdapter;
// 初始化一个适配器
$adapter = new FileAdapter("path/to/policy.csv");
// 用model文件和已有的适配器创建一个决策器
$e = new Enforcer("path/to/model.conf", $adapter);
支持的其他Adapter
Casbin也支持将Policy存储在数据库中,官方提供了在主流框架中使用Casbin的扩展
PHP版本目前提供了Laravel、Yii2、CakePHP、ThinkPHP等主流框架的扩展,可以查阅官方仓库:https://github.com/php-casbin
自定义Adapter
自定义Adapter比较简单:只需要实现Casbin\Persist\Adapter
接口即可:
class MyAdapter implements Adapter{
// 加载Policy
public function loadPolicy($model){
}
// 保存Policy
public function savePolicy($model){
}
// 新增Policy
public function addPolicy($sec, $ptype, $rule){
}
// 删除Policy
public function removePolicy($sec, $ptype, $rule){
}
// 删除符合筛选条件的policy规则
public function removeFilteredPolicy($sec, $ptype, $fieldIndex, ...$fieldValues){
}
}
然后,在初始化决策器时,传入自定义的Adapter:
$adapter = new MyAdapter();
$e = new Enforcer("path/to/model.conf", $adapter);