feat: add admin user management and disable public registration
This commit is contained in:
1 parent
cfbba73791
commit
312a5ccb86
32 files changed
+1120
-69
No files matched your search
@@ -0,0 +1,22 @@
|
||||
# 管理员账号与关闭注册
|
||||
|
||||
2026-10-05:新增 `User.role`、`User.banned`、`User.mustChangePassword`,迁移 `20261005130000_admin_accounts`。现有用户保留 `user`、未封禁、无需首次改密;初始化管理员和新创建账号强制首次改密。
|
||||
|
||||
配置位于 `apps/api/.env`:
|
||||
|
||||
```dotenv
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=admin
|
||||
```
|
||||
|
||||
初始化仅在数据库没有管理员时执行,不覆盖同名账号,不重置已存在管理员。账号名冲突时配置其他用户名再重启。公开注册接口返回 403,登录页面移除注册入口。初始密码允许 `admin`,新密码使用原有强密码校验,且不能与初始密码相同。未改密时只有个人身份、改密、活动和退出接口可访问;业务接口、后台和 MCP 授权被拒绝。
|
||||
|
||||
后台接口:`GET /api/admin/users?limit=50&offset=0`、`POST /api/admin/users`、`PATCH /api/admin/users/:id`。列表完整分页,仅返回账号身份、角色、状态和创建时间;不返回哈希、会话令牌或财务数据。角色为 `admin`、`user`、`readonly`。管理动作在事务内重查管理员权限;禁止修改自身角色或封禁自己,并保留可用管理员。
|
||||
|
||||
角色/封禁状态变化会删除该用户全部会话、撤销 MCP/PAT/OAuth 授权、取消待确认草稿和已批准待兑换授权。解封不会恢复旧令牌。密码修改也会撤销既有 MCP 授权。HTTP 与 MCP 后端都会检查封禁、首次改密和只读权限;只读用户可管理自己的登录密码及只读连接,无法提交财务写入、草稿或确认业务操作。管理员仍遵循原有财务数据用户隔离。
|
||||
|
||||
验证:前后端类型检查、网页生产构建、53 项单元测试,以及使用临时 MySQL 库和独立 API 的管理员与现有业务/MCP/OAuth 回归。当前数据库已应用新增迁移;本机网页验证默认管理员首次登录展示强制改密页,未替用户设置新密码。
|
||||
|
||||
运行隔离回归:在仓库根目录执行 `pnpm --filter @worthpath/api test:isolated`。测试库名使用随机 `wp_test_` 前缀,API 使用随机本机端口;完成或失败后清理自己创建的服务和数据库。管理员测试只在该隔离流程中运行,避免修改真实管理员。
|
||||
|
||||
已有迁移目录 `005_account_icons`、`006_navigation_transfers`、`007_notes_display` 排在初始迁移之前,因此原有 `migrate deploy` 从空库初始化会失败。本次未重命名历史迁移。隔离测试用当前 Prisma 模型建立临时库,再移除本次字段并执行新增 SQL 来验证增量迁移;现有库迁移正常。全新部署仍需要单独修复历史迁移顺序。
|
||||
Reference in new issue
Block a user