初始化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");