初始化Model
Model的加载方法主要有三种:
- 从文件读取
- 从字符串加载
- 动态添加
从文件加载
从文件应该说是最常用的一种方式,只需要在初始化Casbin决策器的时候传入文件地址即可:
// 初始化 model
$m = Enforcer::newModel("path/to/model.conf", "");
// 创建一个 enforcer。
$e = new Enforcer($m);
当然,你也可以初始化Casbin时直接传入Model文件路径:
$e = new Enforcer("path/to/model.conf");
从字符串加载
当Model配置存储在数据库中时,只需要从数据库读出,让Casbin从字符串中加载配置:
$text = <<<EOT
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
EOT;
// 使用字符串初始化 model
$m = Enforcer::newModel($text);
// 创建一个 enforcer。
$e = new Enforcer($m);
动态加载
// 初始化 model
$m = Enforcer::newModel();
$m->addDef("r", "r", "sub, obj, act");
$m->addDef("p", "p", "sub, obj, act");
$m->addDef("g", "g", "_, _");
$m->addDef("e", "e", "some(where (p.eft == allow))");
$m->addDef("m", "m", "g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act");
// 创建一个 enforcer。
$e = new Enforcer($m);
Model更多用法
初始化一个空model
$m = Enforcer::newModel();
加载配置:
// 从文件加载
$m->loadModel($path);
// 从字符串加载
$m->loadModelFromText($text);
// 动态加载
$m->addDef("r", "r", "sub, obj, act");