blob: 3f0713c4afde563edd056c9df6c7d5d09daf01eb [file]
import {Enforcer, Util} from 'casbin';
import {NodeRedisAdapter} from '../src/adapter';
async function testGetPolicy(e: Enforcer, res: string[][]) {
const myRes = await e.getPolicy();
expect(Util.array2DEquals(res, myRes)).toBe(true);
}
async function testGetFilteredPolicy(e: Enforcer, res: string[]) {
const filtered = await e.getFilteredNamedPolicy('p', 0, 'alice');
const myRes = filtered[0];
expect(Util.arrayEquals(res, myRes)).toBe(true);
}
test('test Adapter', async () => {
const redisAdapter = await NodeRedisAdapter.newAdapter({host: "127.0.0.1", port: 6379})
let e = new Enforcer();
await e.initWithFile(
'examples/rbac_model.conf',
'examples/rbac_policy.csv',
);
// This is a trick to save the current policy to the DB.
// We can't call e.savePolicy() because the adapter in the enforcer is still the file adapter.
// The current policy means the policy in the Node-Casbin enforcer (aka in memory).
await redisAdapter.savePolicy(e.getModel());
e.clearPolicy();
await testGetPolicy(e, []);
// Load the policy from DB.
await redisAdapter.loadPolicy(e.getModel());
await testGetPolicy(e, [
['alice', 'data1', 'read'],
['bob', 'data2', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
e = new Enforcer();
await e.initWithAdapter('examples/rbac_model.conf', redisAdapter);
await testGetPolicy(e, [
['alice', 'data1', 'read'],
['bob', 'data2', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
await redisAdapter.loadFilteredPolicy(e.getModel(), {"p": ['alice']});
await testGetFilteredPolicy(e, ['alice', 'data1', 'read']);
// Add policy to DB
await redisAdapter.addPolicy('', 'p', ['role', 'res', 'action']);
e = new Enforcer();
await e.initWithAdapter('examples/rbac_model.conf', redisAdapter);
await testGetPolicy(e, [
['alice', 'data1', 'read'],
['bob', 'data2', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
['role', 'res', 'action'],
]);
// Remove policy from DB
await redisAdapter.removePolicy('', 'p', ['role', 'res', 'action']);
e = new Enforcer();
await e.initWithAdapter('examples/rbac_model.conf', redisAdapter);
await testGetPolicy(e, [
['alice', 'data1', 'read'],
['bob', 'data2', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
await redisAdapter.removeFilteredPolicy('', 'p', 0, 'data2_admin');
e = new Enforcer();
await e.initWithAdapter('examples/rbac_model.conf', redisAdapter);
await testGetPolicy(e, [
['alice', 'data1', 'read'],
['bob', 'data2', 'write'],
]);
await redisAdapter.close()
}, 30 * 1000)