feat: 接入真实登录与成员权限

- auth/members/messages: 新增超级管理员登录、成员权限和密码消息流程
- agent-config/agent: 支持服务端保存 Agent 配置并取消未配置 mock 成功结果
- projects/deploy-runs/settings: 按当前用户权限保护真实接口
- prisma: 新增用户、项目权限和平台消息表结构
This commit is contained in:
湛兮
2026-06-12 00:38:23 +08:00
parent cf1bebf625
commit bc3aa31289
83 changed files with 3844 additions and 378 deletions
@@ -0,0 +1,68 @@
CREATE TABLE `users` (
`id` VARCHAR(191) NOT NULL,
`account` VARCHAR(191) NOT NULL,
`displayName` VARCHAR(191) NOT NULL,
`role` ENUM('SUPER_ADMIN', 'MEMBER') NOT NULL DEFAULT 'MEMBER',
`status` ENUM('ACTIVE', 'DISABLED') NOT NULL DEFAULT 'ACTIVE',
`passwordHash` TEXT NOT NULL,
`mustChangePassword` BOOLEAN NOT NULL DEFAULT false,
`passwordVersion` INTEGER NOT NULL DEFAULT 1,
`lastLoginAt` DATETIME(3) NULL,
`createdById` VARCHAR(191) NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `users_account_key`(`account`),
INDEX `users_role_status_idx`(`role`, `status`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `project_member_permissions` (
`id` VARCHAR(191) NOT NULL,
`userId` VARCHAR(191) NOT NULL,
`projectId` VARCHAR(191) NOT NULL,
`level` ENUM('READ', 'BUILD') NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `project_member_permissions_userId_projectId_key`(`userId`, `projectId`),
INDEX `project_member_permissions_projectId_idx`(`projectId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `platform_messages` (
`id` VARCHAR(191) NOT NULL,
`type` ENUM('PASSWORD_RESET_REQUEST') NOT NULL,
`status` ENUM('PENDING', 'HANDLED') NOT NULL DEFAULT 'PENDING',
`title` VARCHAR(191) NOT NULL,
`content` TEXT NOT NULL,
`requesterId` VARCHAR(191) NULL,
`requesterAccount` VARCHAR(191) NOT NULL,
`targetResourceType` VARCHAR(191) NULL,
`targetResourceId` VARCHAR(191) NULL,
`metadata` JSON NULL,
`handledById` VARCHAR(191) NULL,
`handledAt` DATETIME(3) NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `platform_messages_type_status_createdAt_idx`(`type`, `status`, `createdAt`),
INDEX `platform_messages_requesterId_status_idx`(`requesterId`, `status`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `project_member_permissions`
ADD CONSTRAINT `project_member_permissions_userId_fkey`
FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `project_member_permissions`
ADD CONSTRAINT `project_member_permissions_projectId_fkey`
FOREIGN KEY (`projectId`) REFERENCES `projects`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `platform_messages`
ADD CONSTRAINT `platform_messages_requesterId_fkey`
FOREIGN KEY (`requesterId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE `platform_messages`
ADD CONSTRAINT `platform_messages_handledById_fkey`
FOREIGN KEY (`handledById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
+8 -8
View File
@@ -1,12 +1,12 @@
# Prisma Migration Structure
# Prisma 迁移目录
This project uses Prisma as the default data access layer.
本项目默认使用 Prisma 作为数据访问层。
Migration policy:
迁移规则:
- Create schema changes with `pnpm prisma:migrate:dev --name <change-name>` after the final MySQL connection details are confirmed.
- Commit generated folders under `prisma/migrations/<timestamp>_<change-name>/migration.sql`.
- Run migration checks in deployment before starting the API.
- Keep raw SQL exceptional. If native SQL is required for performance or vendor-specific behavior, place it behind a Repository method and document why Prisma Client is not sufficient.
- 确认本地或测试环境 MySQL 连接后,使用 `pnpm prisma:migrate:dev --name <变更名称>` 生成迁移。
- 需要提交 `prisma/migrations/<时间戳>_<变更名称>/migration.sql`
- 部署前先执行迁移检查,再启动 API 服务。
- 原生 SQL 只允许作为例外使用,必须放在 Repository 方法中并说明原因。
The first-stage schema is defined in `prisma/schema.prisma`; no live migration is executed until a local or staging MySQL database is explicitly provided.
首阶段 schema 定义在 `prisma/schema.prisma`。没有明确数据库连接前,不要求本地自动执行迁移。