# 权限模块开发计划 ## 1. 权限表设计 ```sql CREATE TABLE sys_permission ( id BIGINT PRIMARY KEY COMMENT '主键ID', pid BIGINT DEFAULT 0 COMMENT '父权限ID', level TINYINT NOT NULL DEFAULT 1 COMMENT '权限层级', permission_key VARCHAR(100) NOT NULL COMMENT '权限标识', name VARCHAR(50) NOT NULL COMMENT '权限名称', description VARCHAR(255) DEFAULT '' COMMENT '权限描述', type TINYINT NOT NULL DEFAULT 1 COMMENT '权限类型(1=菜单 2=按钮 3=接口 4=数据)', api_path_key VARCHAR(200) DEFAULT NULL COMMENT '接口路径标识', page_path_key VARCHAR(200) DEFAULT NULL COMMENT '前端路由标识', module VARCHAR(30) NOT NULL COMMENT '所属模块', sort BIGINT DEFAULT 0 COMMENT '排序值', icon VARCHAR(100) DEFAULT NULL COMMENT '图标标识', status TINYINT DEFAULT 1 COMMENT '状态(1=启用, 0禁用)', created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', /* 唯一约束 */ UNIQUE KEY uniq_permission_key (permission_key), /* 单列索引 */ KEY idx_pid (pid), KEY idx_level (level), KEY idx_type (type), KEY idx_module (module), KEY idx_time (created_at), /* 复合索引 */ KEY idx_parent_sort (pid, sort) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='RBAC权限表'; ``` ## 2. 接口功能描述 2.1 新增权限 - 沿用父模块的module 2.2 删除权限 2.3 修改权限 - 存在父权限时,module必须一致 - 同级允许重名 2.4 查看权限完整树 - 模块、状态、类型筛选 2.4 查看指定权限树 - 根据id查其下级树 2.5 排序 ## 3. 接口开发计划 ### 3.1 新增权限接口 - [x] 1.0 创建新增权限接口 (POST /api/permission) - [x] 1.1 生成当前接口业务逻辑文档,写入 `permission.docs.md` - [x] 1.2 创建 `permission.schema.ts` - 定义新增权限Schema - [x] 1.3 创建 `permission.response.ts` - 定义新增权限响应格式 - [x] 1.4 创建 `permission.service.ts` - 实现新增权限业务逻辑 - [x] 1.5 创建 `permission.controller.ts` - 实现新增权限路由 ### 3.2 删除权限接口 - [x] 2.0 创建删除权限接口 (DELETE /api/permission/:id) - [x] 2.1 更新 `permission.docs.md` - 添加删除权限业务逻辑文档 - [x] 2.2 更新 `permission.schema.ts` - 定义删除权限Schema - [x] 2.3 更新 `permission.response.ts` - 定义删除权限响应格式 - [x] 2.4 更新 `permission.service.ts` - 实现删除权限业务逻辑 - [x] 2.5 更新 `permission.controller.ts` - 实现删除权限路由 ### 3.3 修改权限接口 - [ ] 3.0 创建修改权限接口 (PUT /api/permission/:id) - [ ] 3.1 更新 `permission.docs.md` - 添加修改权限业务逻辑文档 - [ ] 3.2 更新 `permission.schema.ts` - 定义修改权限Schema - [ ] 3.3 更新 `permission.response.ts` - 定义修改权限响应格式 - [ ] 3.4 更新 `permission.service.ts` - 实现修改权限业务逻辑 - [ ] 3.5 更新 `permission.controller.ts` - 实现修改权限路由 ### 3.4 查看权限完整树接口 - [ ] 4.0 创建查看权限完整树接口 (GET /api/permission/tree) - [ ] 4.1 更新 `permission.docs.md` - 添加查看权限完整树业务逻辑文档 - [ ] 4.2 更新 `permission.schema.ts` - 定义查看权限完整树Schema - [ ] 4.3 更新 `permission.response.ts` - 定义查看权限完整树响应格式 - [ ] 4.4 更新 `permission.service.ts` - 实现查看权限完整树业务逻辑 - [ ] 4.5 更新 `permission.controller.ts` - 实现查看权限完整树路由 ### 3.5 查看指定权限树接口 - [ ] 5.0 创建查看指定权限树接口 (GET /api/permission/:id/tree) - [ ] 5.1 更新 `permission.docs.md` - 添加查看指定权限树业务逻辑文档 - [ ] 5.2 更新 `permission.schema.ts` - 定义查看指定权限树Schema - [ ] 5.3 更新 `permission.response.ts` - 定义查看指定权限树响应格式 - [ ] 5.4 更新 `permission.service.ts` - 实现查看指定权限树业务逻辑 - [ ] 5.5 更新 `permission.controller.ts` - 实现查看指定权限树路由 ### 3.6 权限排序接口 - [ ] 6.0 创建权限排序接口 (PUT /api/permission/sort) - [ ] 6.1 更新 `permission.docs.md` - 添加权限排序业务逻辑文档 - [ ] 6.2 更新 `permission.schema.ts` - 定义权限排序Schema - [ ] 6.3 更新 `permission.response.ts` - 定义权限排序响应格式 - [ ] 6.4 更新 `permission.service.ts` - 实现权限排序业务逻辑 - [ ] 6.5 更新 `permission.controller.ts` - 实现权限排序路由 ### 3.7 获取权限详情接口 - [ ] 7.0 创建获取权限详情接口 (GET /api/permission/:id) - [ ] 7.1 更新 `permission.docs.md` - 添加获取权限详情业务逻辑文档 - [ ] 7.2 更新 `permission.schema.ts` - 定义获取权限详情Schema - [ ] 7.3 更新 `permission.response.ts` - 定义获取权限详情响应格式 - [ ] 7.4 更新 `permission.service.ts` - 实现获取权限详情业务逻辑 - [ ] 7.5 更新 `permission.controller.ts` - 实现获取权限详情路由 ## 4. 相关文件 - `src/modules/permission/permission.docs.md` - 权限模块业务逻辑文档 - `src/modules/permission/permission.schema.ts` - 权限模块Schema定义 - `src/modules/permission/permission.response.ts` - 权限模块响应格式定义 - `src/modules/permission/permission.service.ts` - 权限模块业务逻辑实现 - `src/modules/permission/permission.controller.ts` - 权限模块路由控制器 - `src/modules/permission/permission.test.md` - 权限模块测试用例文档 - `src/eneities/sysPermission.ts` - 权限表实体定义 - `src/eneities/index.ts` - 实体导出文件更新 ### 备注 - 权限模块需要支持树形结构,注意父子关系的处理 - 权限key必须唯一,需要做好唯一性验证 - 删除权限时需要检查是否有子权限,有则不允许删除 - 修改权限时,如果存在父权限,module必须与父权限一致 - 同级权限允许重名,但权限key必须唯一 - 排序功能需要支持拖拽排序,更新多个权限的sort_order值