jcasbin RoleManager问题
jcasbin的好多设计与golang的还是有些差异的,造成的问题就很明显了与golang 使用方法有差异
部分golang 的业务处理模式不能无缝的移植到java版本,RoleManager 就存在类似的问题
golang 实现
官方golang 的实现提供了一个默认RoleManager,类似其他语言也都实现了基本RoleManager接口定义,有些是没有实现
以下的
// 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.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 文件合并压缩