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