@jiumao/policy
Version:
[](https://npmjs.org/package/@jiumao/policy) [](https://npmjs.org/package/@jiumao/policy)
213 lines (189 loc) • 4.23 kB
text/typescript
import Policy, { IAction } from './policy';
const actions: IAction[] = [
{ module: 'module1', action: 'action1' },
{ module: 'module1', action: 'action2' },
{ module: 'module1', action: 'action3' },
{ module: 'module2', action: 'action1' },
{ module: 'module2', action: 'action2' },
{ module: 'module3', action: 'action1' },
];
let policy = null;
beforeEach(() => {
policy = new Policy(actions);
});
describe('test policy', () => {
it('init', () => {
expect(policy.moduleMap).toEqual({
module1: ['module1/action1', 'module1/action2', 'module1/action3', ],
module2: ['module2/action1', 'module2/action2' ],
module3: ['module3/action1' ]
});
});
it('add allow policy', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/*'
]
}
]
});
expect(policy.allowActions).toEqual(
['module1/action1', 'module1/action2', 'module1/action3']
);
});
it('add deny policy', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'deny',
action: [
'module1/action1',
'module2/*',
]
}
]
});
expect(policy.denyActions).toEqual(
['module1/action1', 'module2/action1', 'module2/action2']
);
});
it('add allow and deny', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1'
]
},
{
effect: 'deny',
action: [
'module1/action1',
'module2/*',
]
}
]
});
expect(policy.allowActions).toEqual(
['module1/action1']
);
expect(policy.denyActions).toEqual(
['module1/action1', 'module2/action1', 'module2/action2']
);
});
});
// 测试验证
describe('action verify', () => {
it('multipleVerify string', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1',
'module2/*',
]
},
{
effect: 'deny',
action: [
'module1/action1'
]
}
]
});
expect(policy.multipleVerify('module1/action1')).toEqual(false);
});
it('multipleVerify array', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1',
'module2/*',
]
},
{
effect: 'deny',
action: [
'module1/action1'
]
}
]
});
expect(policy.multipleVerify(['module2/action1', 'module2/action2'])).toEqual(true);
});
it('combinationVerify !', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1',
'module2/*',
]
},
{
effect: 'deny',
action: [
'module1/action1'
]
}
]
});
expect(policy.combinationVerify('!module1/action1')).toEqual(true);
});
it('combinationVerify &&', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1',
'module2/*',
]
},
{
effect: 'deny',
action: [
'module1/action1'
]
}
]
});
expect(policy.combinationVerify('module2/action1 && module2/action2')).toEqual(true);
});
it('combinationVerify ||', () => {
policy.addPolicy({
version: 1,
statement: [
{
effect: 'allow',
action: [
'module1/action1',
'module2/*',
]
},
{
effect: 'deny',
action: [
'module1/action1'
]
}
]
});
expect(policy.combinationVerify('module2/action1 || module2/action2')).toEqual(true);
});
});