jcasbin RoleManager问题

jcasbin的好多设计与golang的还是有些差异的,造成的问题就很明显了与golang 使用方法有差异
部分golang 的业务处理模式不能无缝的移植到java版本,RoleManager 就存在类似的问题

golang 实现

官方golang 的实现提供了一个默认RoleManager,类似其他语言也都实现了基本RoleManager接口定义,有些是没有实现
以下的

<wiz_code_mirror>
 
 
 
 
 
 
 
// AddMatchingFunc support use pattern in g
func (rm *RoleManager) AddMatchingFunc(name string, fn MatchingFunc) {
    rm.hasPattern = true
    rm.matchingFunc = fn
}
 
// AddDomainMatchingFunc support use domain pattern in g
func (rm *RoleManager) AddDomainMatchingFunc(name string, fn MatchingFunc) {
    rm.hasDomainPattern = true
    rm.domainMatchingFunc = fn
}
 
 

而且有点不太好的是,官方对于name 的定义没有明确的说明(理论上也是可以不需要的),所以好多语言在自己实现的时候
就有差异了(比如nodejs 可传可不传),java 实现就没有,但是可以通过构造函数初始化

问题

因为jcasbin 没有实现默认的AddMatchingFunc 以及AddDomainMatchingFunc 所以如果我们代码集成就需要自己调用下
enforcer.loadPolicy(); 不能保持和golang 语言的一致

解决方法

应用添加实现,后然用户就可以参考golang 的模式进行配置了,参考代码
添加功能(DefaultRoleManager)

 
public  void  AddMatchingFunc(String name,BiPredicate<String, String> matchingFunc){
    this.matchingFunc=matchingFunc;
}
public  void  AddDomainMatchingFunc(String name,BiPredicate<String, String> domainMatchingFunc){
    this.domainMatchingFunc=domainMatchingFunc;
}

调用

MyDemoFunc2  myDemoFunc = new MyDemoFunc2();
Enforcer enforcer = new Enforcer("src/main/resources/model2.conf","src/main/resources/policy2.csv",true);
// enforcer.setRoleManager(new DefaultRoleManager(20,MyDemoFunc2::mymatch, MyDemoFunc2::myKeyMatch));
// enforcer.loadPolicy();
((DefaultRoleManager)enforcer.getRoleManager()).AddDomainMatchingFunc("demo",MyDemoFunc2::myKeyMatch);
enforcer.addFunction(myDemoFunc.getName(),myDemoFunc);
// List<List<String>> result3=  enforcer.getImplicitPermissionsForUser("alice");
//List<String> result3=  enforcer.getImplicitRolesForUser("alice");
List<String> result3=  enforcer.getRolesForUserInDomain("alice","domain3");
System.out.println(result3);

参考资料

https://github.com/casbin/jcasbin

posted on   荣锋亮  阅读(280)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-06-17 nginx location 正则测试
2020-06-17 Using the NGINX Auth Request Module
2019-06-17 使用rrweb 进行web 操作录制以及回放
2019-06-17 HAProxy 2.0 and Beyond
2017-06-17 kong k8s 安装 以及可视化管理界面
2017-06-17 hashids 了解
2015-06-17 RequireJS 文件合并压缩

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示