完善系统权限角色管理功能,实现基于角色的权限控制,特别针对广告管理功能添加细粒度权限控制,确保超级管理员可见可操作,普通管理员不可见,提升系统安全性和管理灵活性。
当前系统已具备基础的角色和权限实体框架,但实际应用有限:
Role实体和permissions字段(simple-array类型)permissionMiddleware和checkPermission函数,但未广泛使用permission: 'advertisement:manage'配置,但未实现实际检查authMiddleware,所有登录管理员都可访问为提升系统安全性和管理精细化,需要完善权限角色管理系统,实现真正的基于角色的权限控制。
角色权限定义完善 (user-module增强)
entity:action格式)advertisement:view, advertisement:create, advertisement:edit, advertisement:delete, advertisement:manage后端API权限检查增强 (server和advertisements-module)
permissionMiddleware权限检查advertisement:manage权限前端权限控制实现 (web管理后台)
数据库默认数据 (user-module-mt迁移)
测试和数据迁移
作为 系统架构师 我希望 明确定义超级管理员和普通管理员角色及其权限 以便 为系统提供清晰的权限基础
验收标准:
user-module中定义标准权限常量:PERMISSION_ADVERTISEMENT_MANAGE = 'advertisement:manage'等super-admin,包含广告管理权限admin,不包含广告管理权限role表优先级:高
技术依赖:user-module, server
作为 安全工程师 我希望 广告管理API进行权限检查 以便 防止未授权用户访问广告管理功能
验收标准:
permissionMiddleware权限检查advertisement:view或advertisement:manage权限advertisement:create或advertisement:manage权限advertisement:edit或advertisement:manage权限advertisement:delete或advertisement:manage权限checkPermission(['advertisement:manage']))优先级:高
技术依赖:advertisements-module, server, user-module-mt
作为 后台管理员 我希望 菜单和页面根据我的权限动态显示 以便 我只看到和访问我有权限的功能
验收标准:
useMenu根据用户权限过滤菜单项advertisement:manage权限的用户显示useHasPermission(permission)返回布尔值<RequirePermission permission="advertisement:manage">优先级:高
技术依赖:web, user-module-mt, server
作为 测试工程师 我希望 验证广告管理权限控制功能 以便 确保权限系统正确工作
验收标准:
advertisement:manage权限advertisement:manage权限优先级:中 技术依赖:所有相关模块
-- 现有role表结构保持不变,用于存储角色和权限
-- 默认角色数据迁移脚本(仅关注广告管理权限)
-- 如果角色已存在,则更新权限;如果不存在,则插入
INSERT INTO role (name, description, permissions)
VALUES
('super-admin', '超级管理员', ARRAY['advertisement:manage']),
('admin', '普通管理员', ARRAY[]::text[])
ON CONFLICT (name) DO UPDATE
SET permissions =
CASE
WHEN EXCLUDED.name = 'super-admin' THEN
-- 超级管理员:确保有 advertisement:manage 权限,保留其他现有权限
array_append(role.permissions, 'advertisement:manage')
WHEN EXCLUDED.name = 'admin' THEN
-- 普通管理员:确保没有 advertisement:manage 权限,保留其他现有权限
array_remove(role.permissions, 'advertisement:manage')
END,
description = EXCLUDED.description;
-- 用户角色关联表(已存在多对多关系)
采用entity:action格式:
advertisement:view - 查看广告advertisement:create - 创建广告advertisement:edit - 编辑广告advertisement:delete - 删除广告advertisement:manage - 广告管理(包含所有操作)packages/
├── user-module/ # 用户模块(增强)
│ ├── src/
│ │ ├── constants/ # 新增:权限常量定义
│ │ │ └── permissions.constants.ts
│ │ ├── entities/ # 现有:角色实体
│ │ │ └── role.entity.ts
│ │ ├── services/ # 现有:角色服务
│ │ │ └── role.service.ts
│ │ └── migrations/ # 新增:默认角色数据迁移
│ │ └── 1234567890-add-default-roles.ts
│ └── package.json
├── advertisements-module/ # 广告模块(增强)
│ ├── src/
│ │ └── routes/ # 更新:集成权限中间件
│ │ └── index.ts
│ └── package.json
└── server/ # 服务器(增强)
├── src/
│ └── middleware/ # 现有:权限中间件
│ └── permission.middleware.ts
└── package.json
web/ # 前端管理后台
└── src/
└── client/
└── admin/
├── hooks/ # 新增:权限相关hooks
│ ├── usePermissions.ts
│ └── useHasPermission.ts
├── components/ # 新增:权限组件
│ └── RequirePermission.tsx
├── menu.tsx # 更新:菜单权限过滤
└── routes.tsx # 更新:路由守卫
GET /api/user/permissions - 获取当前用户权限列表GET /api/roles - 获取角色列表(带权限)PUT /api/roles/{id}/permissions - 更新角色权限GET /api/users/{id}/roles - 获取用户角色PUT /api/users/{id}/roles - 更新用户角色所有广告管理API需要相应权限:
GET /api/advertisements - 需要advertisement:view或advertisement:managePOST /api/advertisements - 需要advertisement:create或advertisement:managePUT /api/advertisements/{id} - 需要advertisement:edit或advertisement:manageDELETE /api/advertisements/{id} - 需要advertisement:delete或advertisement:manageuseMenu根据权限过滤菜单项RequirePermission包装器控制组件显示useHasPermissionhook用于逻辑判断user-module的RoleService,添加权限管理方法advertisements-module路由中添加permissionMiddlewarepermission.middleware.ts中间件web管理后台的菜单和路由系统authMiddleware验证身份permissionMiddleware检查权限checkPermission函数验证用户角色权限RoleService.hasPermission()检查具体权限useMenu过滤无权限菜单项RequirePermission控制组件显示RoleService.hasPermission()permissionMiddleware和checkPermissionuseHasPermission和usePermissionsuseMenu权限过滤user-module添加权限常量定义功能指标:
性能指标:
安全指标:
用户体验指标:
创建时间:2025-12-19 负责人:产品经理 状态:待开始 优先级:高