blob: e6ff9088494d66ba89b0dc04269a768e208143ac [file] [log] [blame]
// Copyright 2019 The Casbin Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { getEnforcerWithPath } from './utils';
test('test getRolesForUser', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getRolesForUser('alice')).toEqual(['admin']);
});
test('test getRolesForUser with domain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv');
expect(await e.getRolesForUser('alice', 'domain1')).toEqual(['role:global_admin']);
});
test('test add/deleteRoleForUSer with domain', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getRolesForUser('bob')).toEqual([]);
expect(await e.addRoleForUser('bob', 'data1_admin')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'data1_admin')).toEqual(true);
expect(await e.getUsersForRole('data1_admin')).toEqual(['admin', 'bob']);
expect(await e.deleteRoleForUser('bob', 'data1_admin')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'role:global_admin')).toEqual(false);
expect(await e.getUsersForRole('data1_admin')).toEqual(['admin']);
});
test('test add/deleteRoleForUSer with domain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv');
expect(await e.getRolesForUser('bob', 'domain1')).toEqual([]);
expect(await e.addRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice', 'bob']);
expect(await e.deleteRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(false);
expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice']);
});
test('test getImplicitRolesForUser', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getImplicitRolesForUser('bob')).toEqual([]);
expect(await e.getImplicitRolesForUser('alice')).toEqual(['admin', 'data1_admin', 'data2_admin']);
});
test('test getImplicitRolesForUser with domain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv');
expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['role:global_admin', 'role:reader', 'role:writer']);
});
test('test getImplicitPermissionsForUser', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true);
expect(await e.hasPermissionForUser('data1_admin', 'data1', 'read')).toEqual(true);
expect(await e.hasPermissionForUser('data1_admin', 'data1', 'write')).toEqual(true);
expect(await e.hasPermissionForUser('data2_admin', 'data2', 'read')).toEqual(true);
expect(await e.hasPermissionForUser('data2_admin', 'data2', 'write')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([
['alice', 'data1', 'read'],
['data1_admin', 'data1', 'read'],
['data1_admin', 'data1', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
});
test('test deleteRolesForUser', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([
['alice', 'data1', 'read'],
['data1_admin', 'data1', 'read'],
['data1_admin', 'data1', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
expect(await e.deleteRolesForUser('alice')).toEqual(true);
expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]);
expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
expect(await e.deleteRolesForUser('bob')).toEqual(false);
expect(await e.hasPermissionForUser('alice', 'data1', 'read')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]);
expect(await e.hasPermissionForUser('bob', 'data2', 'write')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
});
test('test deleteRolesForUser with domain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv');
expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual(['admin']);
expect(await e.getImplicitPermissionsForUser('alice', 'domain1')).toEqual([
['admin', 'domain1', 'data1', 'read'],
['admin', 'domain1', 'data1', 'write'],
]);
expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([
['admin', 'domain2', 'data2', 'read'],
['admin', 'domain2', 'data2', 'write'],
]);
expect(await e.deleteRolesForUser('alice', 'domain1')).toEqual(true);
expect(await e.getImplicitRolesForUser('alice', 'domain1')).toEqual([]);
expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]);
expect(await e.getImplicitPermissionsForUser('bob', 'domain2')).toEqual([
['admin', 'domain2', 'data2', 'read'],
['admin', 'domain2', 'data2', 'write'],
]);
expect(await e.deleteRolesForUser('bob', 'domain1')).toEqual(false);
expect(await e.getImplicitPermissionsForUser('alice', 'domain2')).toEqual([]);
expect(await e.getImplicitPermissionsForUser('bob', 'domain1')).toEqual([]);
});
test('test deleteRole', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([
['alice', 'data1', 'read'],
['data1_admin', 'data1', 'read'],
['data1_admin', 'data1', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
expect(await e.deleteRole('data1_admin')).toEqual(true);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([
['alice', 'data1', 'read'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
await e.deleteRole('data2_admin');
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([['alice', 'data1', 'read']]);
});
test('test deleteUser', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([
['alice', 'data1', 'read'],
['data1_admin', 'data1', 'read'],
['data1_admin', 'data1', 'write'],
['data2_admin', 'data2', 'read'],
['data2_admin', 'data2', 'write'],
]);
await e.deleteUser('alice');
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([['bob', 'data2', 'write']]);
await e.deleteRole('bob');
expect(await e.getImplicitPermissionsForUser('alice')).toEqual([]);
expect(await e.getImplicitPermissionsForUser('bob')).toEqual([]);
});
test('test getImplicitUsersForPermission', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['alice']);
expect(await e.getImplicitUsersForPermission('data1', 'write')).toEqual(['alice']);
expect(await e.getImplicitUsersForPermission('data2', 'read')).toEqual(['alice']);
expect(await e.getImplicitUsersForPermission('data2', 'write')).toEqual(['alice', 'bob']);
e.clearPolicy();
await e.addPolicy('admin', 'data1', 'read');
await e.addPolicy('bob', 'data1', 'read');
await e.addGroupingPolicy('alice', 'admin');
expect(await e.getImplicitUsersForPermission('data1', 'read')).toEqual(['bob', 'alice']);
});
test('test getImplicitUsersForRole', async () => {
const e = await getEnforcerWithPath('examples/rbac_model.conf', 'examples/rbac_with_hierarchy_policy.csv');
expect(await e.getImplicitUsersForRole('admin')).toEqual(['alice']);
expect(await e.getImplicitUsersForRole('data1_admin')).toEqual(['admin', 'alice']);
});
test('test getPermissionsForUserInDomain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_domains_policy.csv');
expect(await e.getPermissionsForUserInDomain('alice', 'domain1')).toEqual([
['admin', 'domain1', 'data1', 'read'],
['admin', 'domain1', 'data1', 'write'],
]);
expect(await e.getPermissionsForUserInDomain('bob', 'domain2')).toEqual([
['admin', 'domain2', 'data2', 'read'],
['admin', 'domain2', 'data2', 'write'],
]);
});
test('test add/deleteRoleForUserInDomain', async () => {
const e = await getEnforcerWithPath('examples/rbac_with_domains_model.conf', 'examples/rbac_with_hierarchy_with_domains_policy.csv');
expect(await e.addRoleForUserInDomain('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice', 'bob']);
expect(await e.deleteRoleForUserInDomain('bob', 'role:global_admin', 'domain1')).toEqual(true);
expect(await e.hasRoleForUser('bob', 'role:global_admin', 'domain1')).toEqual(false);
expect(await e.getUsersForRole('role:global_admin', 'domain1')).toEqual(['alice']);
});