jcsabin FilteredAdapter 逻辑处理问题

jcasbin 默认的Enforcer 构造函数在处理FilteredAdapter的时候有些问题(造成的问题是运行正常,但是过程有问题)

原有参考代码

    public Enforcer(Model m, Adapter adapter) {
        this.adapter = adapter;
        this.watcher = null;
 
        model = m;
        model.printModel();
        fm = FunctionMap.loadFunctionMap();
 
        initialize();
 
        //  此处有问题
        if (this.adapter != null ) {
            loadPolicy();
        }
    }

现象

就是只要是传递了adapter 就会执行加载,问题就很明显了,违背了filter 的意义了

解决方法

实际上官方提供了一个filteradapter 的处理,只是没有使用

    public Enforcer(Model m, Adapter adapter) {
        this.adapter = adapter;
        this.watcher = null;
 
        model = m;
        model.printModel();
        fm = FunctionMap.loadFunctionMap();
 
        initialize();
 
        // fix: Enforcer pass FilteredAdapter will load all policy
        if (this.adapter != null && !isFiltered()) {
            loadPolicy();
        }
    }

说明

相关的pr 已经合并了,并且在1.10.2 已经发布了,对于使jcasbin filteradapter的比较推荐使用此maven 包

参考资料

https://github.com/casbin/jcasbin/pull/197
https://github.com/casbin/jcasbin/releases/tag/v1.10.2