bc3aa31289
- auth/members/messages: 新增超级管理员登录、成员权限和密码消息流程 - agent-config/agent: 支持服务端保存 Agent 配置并取消未配置 mock 成功结果 - projects/deploy-runs/settings: 按当前用户权限保护真实接口 - prisma: 新增用户、项目权限和平台消息表结构
106 lines
3.3 KiB
TypeScript
106 lines
3.3 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
Patch,
|
|
Post,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import {
|
|
ApiBody,
|
|
ApiCreatedResponse,
|
|
ApiOkResponse,
|
|
ApiTags,
|
|
} from '@nestjs/swagger';
|
|
import { AdminOnlyMessage } from '../auth/admin-only-message.decorator';
|
|
import { AuthGuard } from '../auth/auth.guard';
|
|
import { AuthenticatedUser } from '../auth/auth.types';
|
|
import { CurrentUser } from '../auth/current-user.decorator';
|
|
import { PasswordChangeGuard } from '../auth/password-change.guard';
|
|
import { SuperAdminGuard } from '../auth/super-admin.guard';
|
|
import { ZodValidationPipe } from '../common/pipes/zod-validation.pipe';
|
|
import {
|
|
CreateMemberDto,
|
|
CreateMemberDtoInput,
|
|
UpdateMemberPermissionsDto,
|
|
UpdateMemberPermissionsInput,
|
|
UpdateMemberStatusDto,
|
|
UpdateMemberStatusInput,
|
|
createMemberSchema,
|
|
updateMemberPermissionsSchema,
|
|
updateMemberStatusSchema,
|
|
} from './member.dto';
|
|
import { MemberSummary } from './member.types';
|
|
import { MembersService } from './members.service';
|
|
|
|
@ApiTags('成员管理')
|
|
@Controller('members')
|
|
@UseGuards(AuthGuard, PasswordChangeGuard, SuperAdminGuard)
|
|
@AdminOnlyMessage('无权限访问成员管理')
|
|
export class MembersController {
|
|
constructor(private readonly membersService: MembersService) {}
|
|
|
|
@Get()
|
|
@ApiOkResponse({ description: '查询成员列表和项目权限。' })
|
|
async listMembers(): Promise<MemberSummary[]> {
|
|
return this.membersService.listMembers();
|
|
}
|
|
|
|
@Post()
|
|
@ApiBody({ type: CreateMemberDto })
|
|
@ApiCreatedResponse({ description: '创建普通成员,初始密码固定为 111111。' })
|
|
async createMember(
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
@Body(new ZodValidationPipe(createMemberSchema))
|
|
body: CreateMemberDtoInput,
|
|
): Promise<MemberSummary> {
|
|
return this.membersService.createMember(body, user);
|
|
}
|
|
|
|
@Patch(':id/permissions')
|
|
@ApiBody({ type: UpdateMemberPermissionsDto })
|
|
@ApiOkResponse({ description: '更新普通成员的项目权限。' })
|
|
async updatePermissions(
|
|
@Param('id') id: string,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
@Body(new ZodValidationPipe(updateMemberPermissionsSchema))
|
|
body: UpdateMemberPermissionsInput,
|
|
): Promise<MemberSummary> {
|
|
return this.membersService.updatePermissions(id, body, user);
|
|
}
|
|
|
|
@Post(':id/reset-password')
|
|
@ApiOkResponse({
|
|
description: '将普通成员密码重置为 111111,并要求下次登录改密。',
|
|
})
|
|
async resetPassword(
|
|
@Param('id') id: string,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
): Promise<MemberSummary> {
|
|
return this.membersService.resetPassword(id, user);
|
|
}
|
|
|
|
@Patch(':id/status')
|
|
@ApiBody({ type: UpdateMemberStatusDto })
|
|
@ApiOkResponse({ description: '启用或禁用普通成员账号。' })
|
|
async updateStatus(
|
|
@Param('id') id: string,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
@Body(new ZodValidationPipe(updateMemberStatusSchema))
|
|
body: UpdateMemberStatusInput,
|
|
): Promise<MemberSummary> {
|
|
return this.membersService.updateStatus(id, body, user);
|
|
}
|
|
|
|
@Delete(':id')
|
|
@ApiOkResponse({ description: '删除普通成员账号。' })
|
|
async deleteMember(
|
|
@Param('id') id: string,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
): Promise<{ message: string }> {
|
|
return this.membersService.deleteMember(id, user);
|
|
}
|
|
}
|