188 lines
5.8 KiB
TypeScript
188 lines
5.8 KiB
TypeScript
/**
|
||
* @file 权限模块Schema定义
|
||
* @author AI Assistant
|
||
* @date 2024-12-19
|
||
* @lastEditor AI Assistant
|
||
* @lastEditTime 2025-01-07
|
||
* @description 定义权限模块的Schema,包括新增权限、删除权限、修改权限、查看权限树等
|
||
*/
|
||
|
||
import { t, type Static } from 'elysia';
|
||
|
||
/**
|
||
* 新增权限请求参数Schema
|
||
* @description 新增权限的请求参数验证规则
|
||
*/
|
||
export const CreatePermissionSchema = t.Object({
|
||
/** 权限标识,全局唯一 */
|
||
permissionKey: t
|
||
.Transform(
|
||
t.String({
|
||
minLength: 1,
|
||
maxLength: 100,
|
||
pattern: '^[a-zA-Z0-9_]+$',
|
||
description: '权限标识,全局唯一,只允许字母数字下划线,自动转换为小写并去除两端空格',
|
||
examples: ['user:create', 'user:read', 'user:update', 'user:delete'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim().toLowerCase())
|
||
.Encode((value: string) => value),
|
||
/** 权限名称 */
|
||
name: t
|
||
.Transform(
|
||
t.String({
|
||
minLength: 1,
|
||
maxLength: 50,
|
||
description: '权限名称,同级下唯一,自动去除两端空格',
|
||
examples: ['创建用户', '查看用户', '修改用户', '删除用户'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim())
|
||
.Encode((value: string) => value),
|
||
/** 权限描述 */
|
||
description: t.Optional(
|
||
t.Transform(
|
||
t.String({
|
||
maxLength: 255,
|
||
description: '权限描述,自动去除两端空格',
|
||
examples: ['创建新用户的权限', '查看用户信息的权限'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim())
|
||
.Encode((value: string) => value),
|
||
),
|
||
/** 权限类型(1=菜单 2=按钮 3=接口 4=数据) */
|
||
type: t.Union([
|
||
t.Literal(1),
|
||
t.Literal(2),
|
||
t.Literal(3),
|
||
t.Literal(4),
|
||
t.Literal('1'),
|
||
t.Literal('2'),
|
||
t.Literal('3'),
|
||
t.Literal('4'),
|
||
], {
|
||
description: '权限类型:1=菜单,2=按钮,3=接口,4=数据',
|
||
examples: [1, 2, 3, 4],
|
||
}),
|
||
/** 接口路径标识 */
|
||
apiPathKey: t.Optional(
|
||
t.Transform(
|
||
t.String({
|
||
maxLength: 200,
|
||
description: '接口路径标识,type为3(接口)时建议填写,自动去除两端空格',
|
||
examples: ['/api/user', '/api/user/create', 'POST:/api/user'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim())
|
||
.Encode((value: string) => value),
|
||
),
|
||
/** 前端路由标识 */
|
||
pagePathKey: t.Optional(
|
||
t.Transform(
|
||
t.String({
|
||
maxLength: 200,
|
||
description: '前端路由标识,type为1(菜单)时建议填写,自动去除两端空格',
|
||
examples: ['/user', '/user/list', '/user/detail'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim())
|
||
.Encode((value: string) => value),
|
||
),
|
||
/** 所属模块 */
|
||
module: t
|
||
.Transform(
|
||
t.String({
|
||
minLength: 1,
|
||
maxLength: 30,
|
||
pattern: '^[a-zA-Z0-9_]+$',
|
||
description: '所属模块,只允许字母数字下划线,自动转换为小写并去除两端空格',
|
||
examples: ['user', 'role', 'permission', 'system'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim().toLowerCase())
|
||
.Encode((value: string) => value),
|
||
/** 父权限ID,0表示顶级 */
|
||
pid: t.Optional(
|
||
t.Union([
|
||
t.Literal('0'),
|
||
t.String({
|
||
pattern: '^[1-9]\\d*$',
|
||
description: '父权限ID,Bigint字符串形式',
|
||
}),
|
||
], {
|
||
description: '父权限ID,0表示顶级权限',
|
||
examples: ['0', '1', '2'],
|
||
default: '0',
|
||
}),
|
||
),
|
||
/** 排序值 */
|
||
sort: t.Optional(
|
||
t.String({
|
||
maxLength: 20,
|
||
description: '排序值,同级内排序使用',
|
||
examples: ['0','1', '10', '100'],
|
||
})
|
||
),
|
||
/** 图标标识 */
|
||
icon: t.Optional(
|
||
t.Transform(
|
||
t.String({
|
||
maxLength: 100,
|
||
description: '图标标识,CSS类名或图标路径,自动去除两端空格',
|
||
examples: ['icon-user', 'icon-add', '/icons/user.png'],
|
||
}),
|
||
)
|
||
.Decode((value: string) => value.trim())
|
||
.Encode((value: string) => value),
|
||
),
|
||
/** 状态(1=启用, 0=禁用) */
|
||
status: t.Optional(
|
||
t.Union([
|
||
t.Literal(1),
|
||
t.Literal(0),
|
||
t.Literal('1'),
|
||
t.Literal('0'),
|
||
], {
|
||
description: '权限状态:1=启用,0=禁用',
|
||
examples: [1, 0],
|
||
default: 1,
|
||
}),
|
||
),
|
||
});
|
||
|
||
/** 新增权限请求参数类型 */
|
||
export type CreatePermissionRequest = Static<typeof CreatePermissionSchema>;
|
||
|
||
/**
|
||
* 删除权限接口参数Schema
|
||
* @description 校验DELETE /api/permission/:id 路径参数
|
||
*/
|
||
export const DeletePermissionParamsSchema = t.Object({
|
||
id: t.String({
|
||
pattern: '^[1-9]\\d*$',
|
||
description: '权限ID,bigint字符串,必须为正整数',
|
||
examples: ['1', '100', '123456789'],
|
||
}),
|
||
});
|
||
|
||
/** 删除权限参数类型 */
|
||
export type DeletePermissionParams = Static<typeof DeletePermissionParamsSchema>;
|
||
|
||
/**
|
||
* 权限类型枚举
|
||
*/
|
||
export const PermissionType = {
|
||
MENU: 1, // 菜单
|
||
BUTTON: 2, // 按钮
|
||
API: 3, // 接口
|
||
DATA: 4, // 数据
|
||
} as const;
|
||
|
||
/**
|
||
* 权限状态枚举
|
||
*/
|
||
export const PermissionStatus = {
|
||
ENABLED: 1, // 启用
|
||
DISABLED: 0, // 禁用
|
||
} as const;
|