Skip to content

auth 权限

createStatusAuth

单状态权限控制

  • @param statusMap 状态和权限映射表,对象键为状态,值为权限数组
  • @returns 返回权限控制函数对象,权限控制函数名称为权限名称拼上Auth
使用
ts
import { createStatusAuth } from '@aplus-frontend/utils';

// 状态枚举
enum StatusEnum {
  Action = 'action',
  Fail = 'fail'
}

/**
 * 需求:
 * 状态为Action时具有添加(add)、编辑(edit)权限
 * 状态为Fail时具有添加(add)、删除(delete)权限
 */
const { addAuth, editAuth, deleteAuth } = createStatusAuth<StatusEnum>({
  [StatusEnum.Action]: ['add', 'edit'],
  [StatusEnum.Fail]: ['add', 'delete']
});

// 判断状态为Action时是否具有添加权限
addAuth(StatusEnum.Action) // true

// 判断状态为Action时是否具有删除权限
deleteAuth(StatusEnum.Action) // false

createStatusAuth 函数签名

ts
/**
 * StatusEnum 状态枚举
 * AuthEnum 操作枚举
 */
type CreateStatusAuth = <StatusEnum extends string = string, AuthEnum extends string = string>(
  statusMap: Record<StatusEnum, AuthEnum[]>
) => Record<`${AuthEnum}Auth`, (status?: StatusEnum | null) => boolean>;

createStatusGroupAuth

多状态权限控制

  • @param statusMapList 状态和权限映射表,可传多个,对象键为状态,值为权限数组
  • @returns 返回权限控制函数对象,权限控制函数名称为权限名称拼上Auth
使用
ts
import { createStatusGroupAuth } from '@aplus-frontend/utils';

// 状态1枚举
enum Status1Enum {
  Action = 'action',
  Fail = 'fail'
}

// 状态2枚举
enum Status2Enum {
  Start = 'start',
  End = 'end'
}

/**
 * 需求:
 * 状态1为Action时具有添加(add)、编辑(edit)权限
 * 状态1为Fail时具有添加(add)、删除(delete)权限
 * 状态2为Start时具有编辑(edit)、删除(delete)权限
 * 状态2为End时具有添加(add)、删除(delete)权限
 */
const { addAuth, editAuth, deleteAuth } = createStatusGroupAuth(
  {
    [Status1Enum.Action]: ['add', 'edit'],
    [Status1Enum.Fail]: ['add', 'delete']
  },
  {
    [Status2Enum.Start]: ['edit', 'delete'],
    [Status2Enum.End]: ['add', 'delete']
  }
);

// 判断状态1为Action、状态2为Start,时是否具有添加权限
addAuth(Status1Enum.Action, Status2Enum.Start); // false

// 判断状态1为Action、状态2为Start时是否具有删除权限
deleteAuth(Status1Enum.Action, Status2Enum.Start); // true

createStatusGroupAuth 函数签名

ts
/**
 * AuthEnum 操作枚举
 */
type CreateStatusAuth = <AuthEnum extends string = string>(
  ...statusMapList: Record<string, AuthEnum[]>[]
) => Record<string, (...statusList: (string | undefined | null)[]) => boolean>;

多状态权限控制会丢失状态枚举

typescript出于类型安全的考虑对函数入参的类型采用逆变的类型兼容策略

故使用createStatusGroupAuth方法会丢失状态的枚举