Casbin中,适配器(adapterCasbin的中间件)实现了policy规则写入持久层的细节。 Casbin的用户可以调用adapterloadPolicy()方法从持久层中加载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);