zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    QLU Regular Contest 002 题解
    QLU_ACM 2021 专题训练(一)题解 [暴力、排序、贪心、二分]
    QLU ACM-ICPC 2020 Training Contest 11 @2016 ICPC Dalian [Cloned] 题解
    Codeforces Round #696 (Div. 2) AB题解
    Educational Codeforces Round 102 (Rated for Div. 2) ABCD题解
    20210114
    Codeforces Round #169 (Div. 2) CDE题解
    树剖注意要点
    bzoj3631树链剖分
    bzoj1103树状数组水题
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14892978.html
Copyright © 2011-2022 走看看