- 切换数据库为PostgreSQL,更新依赖与配置 - 重构权限体系,使用sys_user/sys_role/sys_menu等新实体替代旧模型 - 移除旧的用户角色/权限/系统设置相关代码与实体 - 新增字典、菜单管理模块与基础CRUD接口 - 优化鉴权逻辑,基于菜单权限标识进行接口校验 - 前端同步更新API、路由与权限控制逻辑 - 删除冗余的v-permission指令与相关代码
108 lines
7.0 KiB
Markdown
108 lines
7.0 KiB
Markdown
# Tasks - 系统管理与认证授权模块对齐新设计
|
||
|
||
## 阶段一:数据库与基础配置
|
||
- [x] Task 1: 切换数据库引擎为 PostgreSQL
|
||
- [x] 在 server/package.json 安装 `pg`、`pg-hstore` 依赖
|
||
- [x] 修改 server/src/config/config.default.ts:sequelize dialect 改为 `postgres`,host/port(5432)/database(xintong)/username/password 环境变量(默认 postgres)
|
||
- [x] 检查 config.local.ts 的 sync 配置合理性(表由 SQL 脚本创建,保持 sync: false 或按需调整)
|
||
- [x] 验证:yarn build 通过,服务可连接 PostgreSQL
|
||
|
||
- [x] Task 2: 补充 database/db_init.sql 初始数据
|
||
- [x] 补充 sys_menu 系统管理目录下的 5 个子菜单(用户管理/角色管理/菜单管理/数据字典/操作日志,含 menu_path/component/permission/sort_order)
|
||
- [x] 补充 sys_user:admin/admin123456(用 Node bcryptjs 生成 hash 填入 password_hash,real_name=运营管理员)
|
||
- [x] 补充 sys_user_role:admin → ADMIN 角色
|
||
- [x] 补充 sys_role_menu:ADMIN 绑定全部菜单;SALESMAN 绑定客户/项目/统计报表等业务菜单
|
||
- [x] 验证:在 PostgreSQL 中执行脚本无报错,各表初始数据条数正确
|
||
|
||
## 阶段二:后端重构
|
||
- [x] Task 3: 重构系统域实体层(7 个实体)
|
||
- [x] 新建 sysUser.entity.ts(sys_user:username/password_hash/real_name/phone/email/status/last_login_at)
|
||
- [x] 新建 sysRole.entity.ts(sys_role:role_code/role_name/description/sort_order)
|
||
- [x] 新建 sysUserRole.entity.ts(sys_user_role)
|
||
- [x] 新建 sysMenu.entity.ts(sys_menu:parent_id/menu_name/menu_path/component/icon/sort_order/menu_type/permission/visible)
|
||
- [x] 新建 sysRoleMenu.entity.ts(sys_role_menu)
|
||
- [x] 新建 sysDict.entity.ts(sys_dict:dict_type/dict_label/dict_value/sort_order/status)
|
||
- [x] 新建 sysOperationLog.entity.ts(sys_operation_log:user_id/module/action/method/params/ip/created_at)
|
||
- [x] 删除旧实体 user/role/userRole/permission/rolePermission/operationLog 的 .entity.ts 文件
|
||
- [x] 验证:yarn build 通过
|
||
|
||
- [x] Task 4: 重构认证与 RBAC
|
||
- [x] auth.service.ts:登录校验 sys_user.password_hash,更新 last_login_at;返回 accessToken/refreshToken/userInfo(id/username/realName)/roles(role_code 数组)/menus(菜单树)
|
||
- [x] auth.controller.ts:登录/刷新/登出/当前用户接口适配
|
||
- [x] 新增菜单查询能力:permission.service(或新 menu.service)提供 getUserMenus(userId)(角色经 sys_role_menu 关联 sys_menu 的树)与 checkUserPermission(userId, code)
|
||
- [x] rbac.middleware.ts:路径→权限标识映射改为基于 sys_menu.permission;ADMIN 角色放行;未授权返回 403
|
||
- [x] 验证:admin 登录返回 menus;无权限角色访问受保护接口返回 403
|
||
|
||
- [x] Task 5: 重构用户管理
|
||
- [x] user.service.ts:字段适配 real_name/phone/email(删除 nickname/avatar/last_login_ip),搜索条件更新,返回数据剔除 password_hash
|
||
- [x] user.controller.ts:接口保持不变,入参字段对齐
|
||
- [x] dto/user.dto.ts:字段更新(realName/phone/email/roleIds)
|
||
- [x] 验证:用户 CRUD 与角色分配联调通过
|
||
|
||
- [x] Task 6: 重构角色管理
|
||
- [x] role.service.ts:字段适配 role_code/role_name/sort_order(删除 status);权限接口改为菜单(getRoleMenus 返回角色已勾选菜单树、updateRoleMenus 批量写 sys_role_menu)
|
||
- [x] role.controller.ts:权限相关接口改为 `/roles/:id/menus`
|
||
- [x] dto/role.dto.ts:字段更新
|
||
- [x] 验证:角色列表、菜单勾选保存联调通过
|
||
|
||
- [x] Task 7: 新增菜单管理模块
|
||
- [x] 新建 menu.controller.ts + menu.service.ts:菜单树查询(含全部菜单供角色配置)、创建/编辑/删除目录或菜单、排序与可见性维护
|
||
- [x] 新建 dto/menu.dto.ts
|
||
- [x] 验证:菜单树 CRUD 联调通过
|
||
|
||
- [x] Task 8: 新增数据字典模块
|
||
- [x] 新建 dict.controller.ts + dict.service.ts:分页列表、按 dict_type 分组查询、创建/编辑/删除
|
||
- [x] 新建 dto/dict.dto.ts
|
||
- [x] 验证:字典 CRUD 与类型筛选联调通过
|
||
|
||
- [x] Task 9: 重构操作日志模块
|
||
- [x] log.service.ts / log.controller.ts:字段对齐(user_id/module/action/method/params/ip),查询支持按 user/module/时间范围筛选
|
||
- [x] log.middleware.ts:按新字段写入(params 存请求体),移除 url/user_agent/status_code/duration/error_message
|
||
- [x] 验证:写操作自动记录日志,查询接口正常
|
||
|
||
- [x] Task 10: 移除系统设置模块
|
||
- [x] 删除 system.controller.ts / system.service.ts
|
||
- [x] 清理 rbac/log 中间件及配置中 settings 相关映射
|
||
- [x] 验证:yarn build 通过,无残留引用
|
||
|
||
## 阶段三:前端重构
|
||
- [x] Task 11: 前端 API 层适配
|
||
- [x] api/auth.ts:登录/当前用户返回类型更新(userInfo.realName、roles、menus)
|
||
- [x] api/user.ts:字段更新(realName/phone/email)
|
||
- [x] api/role.ts:角色字段更新;权限接口改为菜单接口(getRoleMenus/updateRoleMenus)
|
||
- [x] 新增 api/menu.ts、api/dict.ts
|
||
- [x] 删除 api/system.ts
|
||
- [x] api/log.ts:字段与筛选参数更新
|
||
|
||
- [x] Task 12: 前端权限 Store 与动态路由
|
||
- [x] stores/permission.ts:UserInfo 更新(id/username/realName/roles/menus),提供 menus 状态
|
||
- [x] router/index.ts:移除 settings 路由;基于用户 menus 注册动态路由(menu_path→component 映射,缺失组件渲染"功能开发中"占位页);登录跳转仪表盘
|
||
- [x] layouts/index.vue:侧边栏菜单由 menus 动态渲染(目录→子菜单两级 + 图标),移除静态菜单与设置分组;用户名显示 realName
|
||
- [x] 移除 v-permission 指令(directives/permission.ts)及引用
|
||
- [x] 验证:admin 登录后侧边栏显示全部菜单,业务占位页可访问
|
||
|
||
- [x] Task 13: 前端页面适配
|
||
- [x] views/system/user/index.vue:字段改为 realName/phone/email
|
||
- [x] views/system/role/index.vue:权限配置弹窗改为菜单树勾选
|
||
- [x] 新增 views/system/menu/index.vue(树形表格 CRUD)
|
||
- [x] 新增 views/system/dict/index.vue(列表 + 类型筛选 CRUD)
|
||
- [x] views/log/operation.vue:字段与筛选更新
|
||
- [x] 删除 views/settings/basic.vue、views/settings/security.vue
|
||
- [x] 验证:各页面构建通过、交互正常
|
||
|
||
## 阶段四:联调与验证
|
||
- [ ] Task 14: 全流程联调
|
||
- [ ] 前端 yarn dev + 后端服务 + PostgreSQL 环境启动
|
||
- [ ] admin 登录 → 仪表盘 → 系统管理(用户/角色/菜单/字典/日志)全流程走通
|
||
- [ ] 业务员角色仅见授权菜单,未授权接口 403
|
||
- [ ] 日志自动记录写操作并可查询
|
||
- [ ] 边界检查:无菜单角色登录、删除被占用角色、重复用户名/角色编码
|
||
|
||
## Task Dependencies
|
||
- [Task 2] depends on [Task 1](PG 环境就绪后可执行 SQL)
|
||
- [Task 3] 先行;[Task 4-10] depends on [Task 3](实体)
|
||
- [Task 11] depends on [Task 5-9](接口就绪)
|
||
- [Task 12] depends on [Task 11](API 类型)
|
||
- [Task 13] depends on [Task 11]
|
||
- [Task 14] depends on [Task 4-13]
|