feat: 接入真实登录与成员权限
- auth/members/messages: 新增超级管理员登录、成员权限和密码消息流程 - agent-config/agent: 支持服务端保存 Agent 配置并取消未配置 mock 成功结果 - projects/deploy-runs/settings: 按当前用户权限保护真实接口 - prisma: 新增用户、项目权限和平台消息表结构
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user