前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Casbin如何添加自定义函数

Casbin如何添加自定义函数

作者头像
Tinywan
发布2023-03-08 20:16:01
8030
发布2023-03-08 20:16:01
举报
文章被收录于专栏:开源技术小栈开源技术小栈

1如何使用自定义函数

官方:https://casbin.org/docs/zh-CN/function

2需求

使用自定义函数支持多个超级管理员。

3官方中只教了如何设置一个用户为超级管理员

代码语言:javascript
复制
[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)你的自定义函数

代码语言:javascript
复制
public function isSuperAdmin(string $key1){
    $superAdminMap = ['root','admin'];
    if(in_array($key1,$superAdminMap,true)) {
        return true;
    }
    return false;
}

改造为匿名函数

代码语言:javascript
复制
$superAdminMap = ['root','admin'];
$isSuperAdmin = function (string $key1) use ($superAdminMap){
    if(in_array($key1,$superAdminMap,true)) {
        return true;
    }
    return false;
};

使用 use 向匿名函数传递参数

6(2)注册这个函数

代码语言:javascript
复制
// 自定义函数
$isSuperAdmin = function (string $key1) use ($superAdminMap){
    if(in_array($key1,$superAdminMap,true)) {
        return true;
    }
    return false;
};

// 注册函数
Enforcer::addFunction('isSuperAdmin',$isSuperAdmin);

把上面的注册函数改造一下

代码语言:javascript
复制
$superAdminMap = ['root','admin'];
Enforcer::addFunction('isSuperAdmin',function (string $key1) use ($superAdminMap){
    if(in_array($key1, $superAdminMap, true)) {
     return true;
    }
    return false;
});

7(3)使用自定义函数

代码语言:javascript
复制
[matchers]
m = g(r.sub, p.sub) && keyMatch2(r.obj, p.obj) && regexMatch(r.act, p.act) || isSuperAdmin(r.sub)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1如何使用自定义函数
  • 2需求
  • 3官方中只教了如何设置一个用户为超级管理员
  • 4自定义函数分几步?答案是:三步!
  • 5(1)你的自定义函数
  • 6(2)注册这个函数
  • 7(3)使用自定义函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档