Files
devops-platform-api/src/members/member.dto.ts
T
湛兮 bc3aa31289 feat: 接入真实登录与成员权限
- auth/members/messages: 新增超级管理员登录、成员权限和密码消息流程
- agent-config/agent: 支持服务端保存 Agent 配置并取消未配置 mock 成功结果
- projects/deploy-runs/settings: 按当前用户权限保护真实接口
- prisma: 新增用户、项目权限和平台消息表结构
2026-06-12 00:38:23 +08:00

71 lines
2.0 KiB
TypeScript

import { ApiProperty } from '@nestjs/swagger';
import { z } from 'zod';
const permissionLevelSchema = z.enum(['none', 'read', 'build']);
export const projectPermissionSchema = z.object({
projectKey: z.string().trim().min(1).max(80),
level: permissionLevelSchema,
});
export const createMemberSchema = z.object({
account: z.string().trim().min(1).max(80),
displayName: z.string().trim().min(1).max(120),
permissions: z.array(projectPermissionSchema).optional().default([]),
});
export type CreateMemberDtoInput = z.infer<typeof createMemberSchema>;
export class ProjectPermissionDto {
@ApiProperty({ example: 'devops-platform-api', description: '项目标识' })
projectKey!: string;
@ApiProperty({
enum: ['none', 'read', 'build'],
description: '项目权限:none 无权限,read 只读,build 构建',
})
level!: 'none' | 'read' | 'build';
}
export class CreateMemberDto {
@ApiProperty({ example: 'member01', description: '成员账号' })
account!: string;
@ApiProperty({ example: '成员一', description: '成员名称' })
displayName!: string;
@ApiProperty({
type: [ProjectPermissionDto],
required: false,
description: '成员项目权限,未传项目默认为无权限',
})
permissions?: ProjectPermissionDto[];
}
export const updateMemberPermissionsSchema = z.object({
permissions: z.array(projectPermissionSchema).default([]),
});
export type UpdateMemberPermissionsInput = z.infer<
typeof updateMemberPermissionsSchema
>;
export class UpdateMemberPermissionsDto {
@ApiProperty({ type: [ProjectPermissionDto], description: '完整项目权限列表' })
permissions!: ProjectPermissionDto[];
}
export const updateMemberStatusSchema = z.object({
status: z.enum(['active', 'disabled']),
});
export type UpdateMemberStatusInput = z.infer<typeof updateMemberStatusSchema>;
export class UpdateMemberStatusDto {
@ApiProperty({
enum: ['active', 'disabled'],
description: '成员状态:active 启用,disabled 禁用',
})
status!: 'active' | 'disabled';
}