1如何使用自定义函数
官方:https://casbin.org/docs/zh-CN/function
2需求
使用自定义函数支持多个超级管理员。
3官方中只教了如何设置一个用户为超级管理员
[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 || r.sub == "root"
r.sub == “root” // 请求中用户为root是超级管理员
4自定义函数分几步?答案是:三步!
-
准备好你的自定义函数
-
在Casbin的执行者(enforcer)中注册这个函数
-
在您的模型CONF中使用自定义函数
注意:使用自定义函数参数个数需要和准备好的一致哦
5(1)你的自定义函数
public function isSuperAdmin(string $key1){
$superAdminMap = ['root','admin'];
if(in_array($key1,$superAdminMap,true)) {
return true;
}
return false;
}
改造为匿名函数
$superAdminMap = ['root','admin'];
$isSuperAdmin = function (string $key1) use ($superAdminMap){
if(in_array($key1,$superAdminMap,true)) {
return true;
}
return false;
};
使用
use
向匿名函数传递参数
6(2)注册这个函数
// 自定义函数
$isSuperAdmin = function (string $key1) use ($superAdminMap){
if(in_array($key1,$superAdminMap,true)) {
return true;
}
return false;
};
// 注册函数
Enforcer::addFunction('isSuperAdmin',$isSuperAdmin);
把上面的注册函数改造一下
$superAdminMap = ['root','admin'];
Enforcer::addFunction('isSuperAdmin',function (string $key1) use ($superAdminMap){
if(in_array($key1, $superAdminMap, true)) {
return true;
}
return false;
});
7(3)使用自定义函数
[matchers]
m = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act) || isSuperAdmin(r.sub)
原文始发于微信公众号(开源技术小栈):Casbin如何添加自定义函数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248382.html