0.5.0 • Published 4 years ago

@pansy/policy v0.5.0

Weekly downloads
5
License
MIT
Repository
-
Last release
4 years ago

解析权限策略,并提供验证功能,参考阿里云 Policy

📦 安装

// npm
npm install @pansy/policy --save

// yarn
yarn add @pansy/policy

🔨 使用

import Policy from '@pansy/policy';

const actions = [
  { module: 'module1', action: 'action1' },
  { module: 'module1', action: 'action2' },
  { module: 'module1', action: 'action3' },
  { module: 'module2', action: 'action1' },
  { module: 'module2', action: 'action2' },
]

// 分隔符支持 '/' 或者 ':', 默认 '/'
// const policy = new Policy(actions, ':');
const policy = new Policy(actions);

policy.addPolicy({
  version: 1,
  statement: [
    {
      effect: 'allow',
      action: [
        'module1/*'
      ]
    }
  ]
})

policy.multipleVerify('module1/action1'); // true
policy.multipleVerify('module2/action1'); // false

API

addPolicy(policy)

添加权限策略

参数

1、 policy

interface IStatement {
  // 授权效力 allow: 允许 deny: 禁止
  effect: 'allow' | 'deny';
  // 操作列表
  action: '*' | string[];
}

interface IPolicyData {
  version: string | number;
  statement: IStatement[]
}

singleVerify(action: string): boolean

单个 action 验证

参数

1、action

  • eg1: '*'
  • eg2: 'module1/action1'

multipleVerify(actions: string | string[]): boolean

单个/多个 action 验证

参数

1、actions

  • eg1: '*'
  • eg2: 'module1/action1'
  • eg3: ['module1/action1', 'module1/action2']

combinationVerify(actionStr: string): boolean

组合 action 验证

! 取非 && 且 || 或

参数

1、action

  • eg1: '!module1/action1'
  • eg2: 'module1/action1' && 'module1/action2'
  • eg3: 'module1/action1' || 'module1/action2'

策略数据结构

{
  // 策略版本
  version: 1,
  // 授权语句
  statement: [
    {
      // 授权效力 allow: 允许 deny: 禁止
      effect: 'allow',
      // 操作
      // * | string[]
      // eg: "*" 代表可访问所有权限
      // eg: "module1/*" 代表可访问module1下所有权限
      // eg: "module1/action1" 代表可访问module1下action1权限
      action: 'system:*'
    },
    {
      effect: 'allow',
      action: [
        'permission:actionCreate',
        'permission:actionUpdate'
      ]
    }
  ]
}