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) // falsecreateStatusAuth 函数签名
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); // truecreateStatusGroupAuth 函数签名
ts
/**
* AuthEnum 操作枚举
*/
type CreateStatusAuth = <AuthEnum extends string = string>(
...statusMapList: Record<string, AuthEnum[]>[]
) => Record<string, (...statusList: (string | undefined | null)[]) => boolean>;多状态权限控制会丢失状态枚举
typescript出于类型安全的考虑对函数入参的类型采用逆变的类型兼容策略
故使用createStatusGroupAuth方法会丢失状态的枚举