1

This TypeORMAdapter (https://github.com/node-casbin/typeorm-adapter) supports FilteredAdapter however not sure why I'm getting below error : -

Error: filtered policies are not supported by this adapter
message:"filtered policies are not supported by this adapter"
stack:"Error: filtered policies are not supported by this adapter
    at Enforcer.<anonymous> (/var/task/node_modules/casbin/lib/coreEnforcer.js:159:23)
    at Generator.next (<anonymous>)
    at /var/task/node_modules/casbin/lib/coreEnforcer.js:21:71
    at new Promise (<anonymous>)
    at /var/task/node_modules/casbin/lib/coreEnforcer.js:17:12
    at Enforcer.loadFilteredPolicy (/var/task/node_modules/casbin/lib/coreEnforcer.js:153:16)
    at /var/task/src/loadPermissions.js:35:24
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Runtime.handler (/var/task/index.js:15:22)"
__proto__:Object {constructor: , name: "Error", message: "", …}

Below is my code: -

'use-strict';
const { newEnforcer } = require('casbin');
const TypeORMAdapter = require('typeorm-adapter');
const { updateCache } = require('./cache-manager/cacheService');
const MODEL = process.env.MODEL || './enforcer/casbin_conf/model.conf';
const { join } = require('path');

module.exports.loadPermissions = async (event, context, callback, logger) => {
    let key = null;
    if (event.queryStringParameters && event.queryStringParameters.key) {
        console.log("Received key: " + event.queryStringParameters.key);
        key = event.queryStringParameters.key;
    }
    const a = await TypeORMAdapter.default.newAdapter({
        type: 'mysql',
        host: '192.168.1.5',
        port: 3306,
        username: 'root',
        password: '',
        database: 'casbin',
    });
    //a.enabledFiltered(true);

    const e = await newEnforcer(join(__dirname, MODEL), a);
    // Load the filtered policy from DB.
    const fp = await e.loadFilteredPolicy({
        'ptype': 'p',
        'v0': 'alice'
    });
    const policies = { "v0": "p", "v1": "admin", "v2": "/*", "v3": "GET" }; //temp code only
    return await updateCache(key, policies, logger);
};

I get error whenever I call this method loadFilteredPolicy(). Secondly, I would like to know why the method loadFilteredPolicy(filter) is getting called which is there on CoreEnforcer class. I want to invoke the loadFilteredPolicy(model, filter) which is there on TypeORMAdapter.

Please assist me here.

enter image description here

Thank you

vinod827
  • 366
  • 4
  • 16

1 Answers1

1

That adapter doesn't support the "filtered policy" feature. It's an optional feature. See: https://casbin.org/docs/en/policy-subset-loading

You can raise a GitHub issue in that adapter's repo. In the issue, you can ask for help to support that feature. PR is also welcomed.

Yang Luo
  • 2,049
  • 2
  • 26
  • 50