# 蚊子系统管理后台PRD v1.0 ## 1. 文档信息 - **版本**:v1.0 - **创建日期**:2026-03-04 - **作者**:AI Assistant - **项目**:蚊子系统(活动传播、邀请奖励与运营分析系统) ### 变更记录 | 版本 | 日期 | 变更内容 | 作者 | |------|------|----------|------| | v1.0 | 2026-03-04 | 初始版本 | AI Assistant | --- ## 2. 项目概述 ### 2.1 项目背景 蚊子系统是一个活动传播、邀请奖励与运营分析平台。当前管理后台的权限体系过于简单,仅有3个基础角色(admin、operator、viewer),无法满足生产环境中复杂的业务需求。 ### 2.2 项目目标 设计一套生产级管理后台权限体系,实现: 1. 完整的角色权限体系(15个专业角色) 2. 权限细化到功能按钮级别(200+权限点) 3. 业务场景完整闭环 4. 数据权限控制(全部、部门、个人三级) 5. 审批流程设计 ### 2.3 项目范围 - 适用范围:管理后台(Admin Portal) - 用户群体:内部运营人员、管理人员 --- ## 3. 角色体系设计 ### 3.1 角色总览 > ⚠️ **产品建议**:15个角色可根据实际业务规模调整为10个核心角色,其他作为扩展角色。 | 层级 | 角色 | 角色代码 | 数据权限 | 核心角色 | |------|------|----------|----------|----------| | 系统层 | 超级管理员 | super_admin | 全部 | ✅ | | 系统层 | 系统管理员 | system_admin | 全部 | ✅ | | 管理层 | 运营总监 | operation_director | 部门 | ✅ | | 管理层 | 运营经理 | operation_manager | 部门 | ✅ | | 执行层 | 运营专员 | operation_specialist | 个人 | ✅ | | 管理层 | 市场总监 | marketing_director | 部门 | ⚠️ 扩展 | | 管理层 | 市场经理 | marketing_manager | 部门 | ⚠️ 扩展 | | 执行层 | 市场专员 | marketing_specialist | 个人 | ⚠️ 扩展 | | 管理层 | 财务经理 | finance_manager | 部门 | ✅ | | 执行层 | 财务专员 | finance_specialist | 个人 | ✅ | | 管理层 | 风控经理 | risk_manager | 部门 | ✅ | | 执行层 | 风控专员 | risk_specialist | personal | ✅ | | 管理层 | 客服主管 | cs_manager | 部门 | ✅ | | 执行层 | 客服专员 | cs_agent | personal | ✅ | | 审计层 | 审计员 | auditor | 全部 | ✅ | **核心角色(10个)**:超级管理员、系统管理员、运营总监、运营经理、运营专员、财务经理、财务专员、风控经理、客服主管、审计员 **扩展角色(5个)**:市场总监、市场经理、市场专员、风控专员、客服专员(可按需启用) ### 3.2 角色详细定义 #### 3.2.1 超级管理员(super_admin) - 角色代码:super_admin - 职责:系统最高权限拥有者,负责系统初始化配置、紧急故障处理 - 典型用户:技术负责人、系统owner - 数据权限:全部 - 特殊权限:可分配和撤销任何角色、可访问系统底层配置 - ⚠️ 安全限制:绕过审批需记录审计日志,紧急情况需事后报告 #### 3.2.2 系统管理员(system_admin) - 角色代码:system_admin - 职责:负责系统日常运维、用户账号管理、系统参数配置 - 典型用户:运维工程师、IT支持人员 - 数据权限:全部 #### 3.2.3 运营总监(operation_director) - 角色代码:operation_director - 职责:运营策略制定、活动整体规划、运营数据分析和汇报、部门团队管理 - 典型用户:运营负责人、运营总监 - 数据权限:部门 - 审批范围:运营团队提交的活动审批、运营预算审批 - 业务边界:与市场总监分工明确,运营侧重平台活动,市场侧重对外推广 #### 3.2.4 运营经理(operation_manager) - 角色代码:operation_manager - 职责:活动策划和执行、活动效果跟踪、运营数据分析 - 典型用户:运营主管、活动策划负责人 - 数据权限:部门 #### 3.2.5 运营专员(operation_specialist) - 角色代码:operation_specialist - 职责:活动创建和执行、活动日常运营、数据统计和汇报 - 典型用户:运营专员、活动执行人员 - 数据权限:个人 #### 3.2.6 市场总监(marketing_director) - 角色代码:marketing_director - 职责:市场策略制定、营销活动规划、预算管理和审批、对外合作洽谈 - 典型用户:市场负责人、市场总监 - 数据权限:部门 - 审批范围:市场团队提交的营销活动审批、预算使用审批 - 业务边界:与运营总监分工明确,市场侧重推广获客,运营侧重平台活动 #### 3.2.7 市场经理(marketing_manager) - 角色代码:marketing_manager - 职责:营销活动策划、活动推广执行、推广效果跟踪 - 典型用户:市场主管、营销策划负责人 - 数据权限:部门 #### 3.2.8 市场专员(marketing_specialist) - 角色代码:marketing_specialist - 职责:营销活动创建、活动推广执行、推广数据分析 - 典型用户:市场专员、推广专员 - 数据权限:个人 #### 3.2.9 财务经理(finance_manager) - 角色代码:finance_manager - 职责:奖励资金管理、财务报表审核、奖励发放审批 - 典型用户:财务负责人、会计主管 - 数据权限:部门 #### 3.2.10 财务专员(finance_specialist) - 角色代码:finance_specialist - 职责:奖励发放执行、日常对账、财务报表制作 - 典型用户:会计、出纳 - 数据权限:个人 #### 3.2.11 风控经理(risk_manager) - 角色代码:risk_manager - 职责:风控策略制定、风控规则配置、风险事件审核 - 典型用户:风控负责人、合规主管 - 数据权限:部门 #### 3.2.12 风控专员(risk_specialist) - 角色代码:risk_specialist - 职责:风险事件监测、风险异常处理、风险数据分析 - 典型用户:风控专员、风险分析师 - 数据权限:个人 #### 3.2.13 客服主管(cs_manager) - 角色代码:cs_manager - 职责:客服团队管理、客诉处理监督、用户权限审批、重大客诉处理 - 典型用户:客服负责人、客服主管 - 数据权限:部门 - 审批范围:用户冻结/解冻审批、用户权限变更审批、客诉处理方案审批 - 业务边界:客服专员负责日常咨询,主管负责审核和重大问题处理 #### 3.2.14 客服专员(cs_agent) - 角色代码:cs_agent - 职责:用户咨询响应、问题处理和解答、用户反馈记录 - 典型用户:客服人员、用户支持专员 - 数据权限:个人 #### 3.2.15 审计员(auditor) - 角色代码:auditor - 职责:系统操作审计、合规性检查、异常行为分析 - 典型用户:内审人员、合规专员 - 数据权限:全部 --- ## 4. 权限体系设计 ### 4.1 权限命名规范 采用四段式命名规范:模块.资源.操作.数据范围 示例: - activity.list.view.all(查看所有活动列表) - activity.create.submit(提交创建活动) - reward.grant.execute(执行奖励发放) ### 4.2 模块划分 > **重要**: 本文档中列出的225个权限点为PRD规划目标。当前验收基线为 **94 个 Canonical 权限码**,详见 [权限码映射表.md](./权限码映射表.md)。 | 序号 | 模块代码 | 模块名称 | 权限点数量(规划) | |------|----------|----------|-------------------| | 1 | dashboard | 仪表盘 | 15 | | 2 | activity | 活动管理 | 35 | | 3 | user | 用户管理 | 30 | | 4 | reward | 奖励管理 | 25 | | 5 | risk | 风险管理 | 25 | | 6 | approval | 审批中心 | 20 | | 7 | audit | 审计日志 | 15 | | 8 | notification | 通知管理 | 15 | | 9 | system | 系统配置 | 25 | | 10 | permission | 权限管理 | 20 | | **合计** | - | - | **225** | ### 4.3 核心权限点清单 #### 仪表盘模块(dashboard) - dashboard.view.all(查看全部仪表盘) - dashboard.view.department(查看部门仪表盘) - dashboard.view.own(查看个人仪表盘) - dashboard.export(导出仪表盘数据) #### 活动管理模块(activity) - activity.list.view.all/department/own(查看活动列表) - activity.detail.view(查看活动详情) - activity.create.submit(提交创建活动) - activity.create.approve(审批创建活动) - activity.edit.submit/approve(编辑活动) - activity.publish.execute(发布活动) - activity.pause.execute(暂停活动) - activity.resume.execute(恢复活动) - activity.end.execute(结束活动) - activity.delete.execute(删除活动) - activity.export.execute(导出活动数据) #### 用户管理模块(user) - user.list.view.all/department/own(查看用户列表) - user.detail.view(查看用户详情) - user.create.submit/approve(创建用户) - user.freeze.execute(冻结用户) - user.unfreeze.execute(解冻用户) - user.authenticate.execute(实名认证) - user.permission.assign(分配权限) - user.role.assign(分配角色) #### 奖励管理模块(reward) - reward.list.view(查看奖励列表) - reward.apply.submit(提交奖励申请) - reward.apply.approve(审批奖励申请) - reward.grant.execute(发放奖励) - reward.reconcile.execute(对账操作) #### 风险管理模块(risk) - risk.list.view(查看风险列表) - risk.rule.create/edit/delete(风控规则管理) - risk.rule.enable/disable(启用/禁用规则) - risk.block.execute(拦截风险操作) #### 审批中心模块(approval) - approval.pending.view(查看待审批列表) - approval.execute.approve(执行审批通过) - approval.execute.reject(执行审批拒绝) - approval.execute.transfer(转交审批) #### 审计日志模块(audit) - audit.log.view(查看审计日志) - audit.log.export(导出审计日志) - audit.report.view(查看审计报告) #### 系统配置模块(system) - system.config.view/edit(查看/编辑系统配置) - system.cache.clear(清除缓存) - system.api-key.create/delete(API密钥管理) #### 权限管理模块(permission) - permission.role.view/create/edit/delete(角色管理) - permission.user.assign(用户授权) - permission.data.config(数据权限配置) --- ## 5. 权限矩阵(核心权限) | 权限点 | 超级管理员 | 系统管理员 | 运营总监 | 运营经理 | 运营专员 | 市场总监 | 市场经理 | 财务经理 | 风控经理 | 客服主管 | 审计员 | |--------|-----------|-----------|---------|---------|---------|---------|---------|---------|---------|---------|-------| | dashboard.view.all | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | | activity.list.view.all | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | | activity.create.submit | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | activity.create.approve | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | activity.publish.execute | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | | user.list.view.all | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | | user.freeze.execute | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | | user.unfreeze.execute | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | | reward.apply.approve | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | | reward.grant.execute | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | | risk.rule.create | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | | risk.rule.edit | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | | approval.pending.view | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | system.config.edit | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | permission.role.create | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | --- ## 6. 数据权限设计 ### 6.1 数据权限级别 | 级别 | 代码 | 说明 | |------|------|------| | 全部 | ALL | 查看和操作所有数据 | | 部门 | DEPARTMENT | 查看和操作本部门及下级部门数据 | | 个人 | OWN | 查看和操作自己创建/负责的数据 | ### 6.2 角色数据权限映射 | 角色 | 数据权限 | 继承下级 | |------|----------|----------| | super_admin | ALL | - | | system_admin | ALL | - | | operation_director | DEPARTMENT | 是 | | operation_manager | DEPARTMENT | 是 | | operation_specialist | OWN | - | | marketing_director | DEPARTMENT | 是 | | marketing_manager | DEPARTMENT | 是 | | marketing_specialist | OWN | - | | finance_manager | DEPARTMENT | 是 | | finance_specialist | OWN | - | | risk_manager | DEPARTMENT | 是 | | risk_specialist | OWN | - | | cs_manager | DEPARTMENT | 是 | | cs_agent | OWN | - | | auditor | ALL | - | ### 6.3 数据权限应用规则 1. 列表查询:系统自动根据数据权限过滤 2. 详情查看:无权限时返回403 3. 编辑/删除:按权限控制操作范围 4. 导出:根据权限限制导出范围 5. ⚠️ 敏感数据脱敏:无权限查看敏感字段时,自动脱敏显示 ### 6.4 敏感数据脱敏规则 | 字段类型 | 脱敏前 | 脱敏后 | 适用场景 | |----------|--------|--------|----------| | 手机号 | 13812345678 | 138****5678 | 用户手机 | | 身份证 | 110101199001011234 | 110101********1234 | 实名认证 | | 银行卡 | 6222021234567890123 | 6222 **** **** 0123 | 奖励发放 | | 邮箱 | user@example.com | u***r@example.com | 用户邮箱 | ### 6.5 权限变更审计规则 | 操作类型 | 审计内容 | 保留时间 | |----------|----------|----------| | 权限分配 | 操作人、目标人、权限、原因 | 永久 | | 权限撤销 | 操作人、目标人、权限、原因 | 永久 | | 审批绕过 | 操作人、业务、原因、审批人 | 永久 | | 角色变更 | 操作人、角色、变更内容 | 永久 | | 数据导出 | 操作人、导出数据范围、原因 | 3年 | --- ## 7. 审批流程设计 ### 7.1 审批场景 | 审批场景 | 触发条件 | 审批节点 | 超时时间 | 备注 | |----------|----------|----------|----------|------| | 活动创建 | 提交新活动 | 运营经理→运营总监 | 24h→48h | - | | 活动编辑 | 修改进行中的活动 | 运营经理→运营总监 | 24h→48h | 重大变更需审批 | | 活动删除 | 删除草稿/已结束活动 | 运营经理审批 | 24h | - | | 奖励申请 | 申请奖励 | 风控审核→财务审批 | 24h→24h | - | | 大额奖励 | 金额≥10000 | 风控→财务经理→总监 | 24h→24h→48h | - | | 用户冻结 | 冻结用户 | 客服主管审批 | 24h | - | | 用户解冻 | 解冻用户 | 客服主管→风控审批 | 24h→24h | 含申诉解冻 | | 用户删除 | 删除用户 | 客服主管→运营总监 | 24h→48h | 不可恢复 | | 敏感数据导出 | 导出全量用户/订单 | 部门负责人审批 | 24h | 需记录导出原因 | | 风控规则 | 新增/修改规则 | 风控经理→运营总监 | 24h→48h | - | | 系统配置 | 修改核心配置 | 系统管理员→超级管理员 | 24h→48h | - | | 权限变更 | 分配/撤销重要权限 | 审批流配置 | 24h | 敏感权限需审批 | | 角色变更 | 创建/修改/删除角色 | 超级管理员审批 | 48h | - | ### 7.2 审批流程类型 1. 串行审批:按顺序逐级审批 2. 并行审批:多个审批人同时审批,任一通过即可 3. 会签审批:多个审批人同时审批,全部通过才可 ### 7.3 审批超时机制 - 50%超时:提醒(站内信、邮件) - 80%超时:再次提醒(站内信、邮件、短信) - 100%超时:升级(自动转交) --- ## 8. 业务流程 ### 8.1 活动全生命周期流程 ```mermaid flowchart TD A[创建草稿] --> B{提交审批?} B -->|是| C[提交审批] B -->|否| D[保存草稿] C --> E{审批结果} E -->|通过| F[审批通过] E -->|拒绝| G[审批拒绝] F --> H{发布活动?} H -->|是| I[发布活动] I --> J[活动进行中] H -->|否| K[待发布] J --> L{异常?} L -->|是| M[暂停活动] L -->|否| N{手动暂停?} N -->|是| M N -->|否| O{手动结束?} O -->|是| P[结束活动] O -->|否| J M --> Q{恢复活动?} Q -->|是| J Q -->|否| R[已暂停] P --> S[活动归档] G --> A D --> A ``` **状态说明**: | 状态 | 说明 | 可执行操作 | |------|------|------------| | 草稿 | 活动创建未提交 | 编辑、删除、提交审批 | | 待审批 | 等待审批 | 撤回 | | 审批通过 | 审批已通过 | 发布 | | 审批拒绝 | 审批被拒绝 | 编辑、重新提交 | | 进行中 | 活动正在进行 | 暂停、结束 | | 已暂停 | 活动已暂停 | 恢复 | | 已结束 | 活动正常结束 | 归档 | --- ### 8.2 奖励发放流程 ```mermaid flowchart TD A[提交奖励申请] --> B{金额判断} B -->|<1000| C[直接发放] B -->|1000-9999| D[风控审核] B -->|≥10000| E[风控→财务审批] D --> F{风控结果} E --> F F -->|通过| G[发放执行] F -->|拒绝| H[拒绝申请] G --> I[用户账户] I --> J{对账结果} J -->|成功| K[归档] J -->|失败| G ``` **审批规则**(与业务流程.md保持一致): | 金额范围 | 审批流程 | 审批人 | 超时时间 | |----------|----------|--------|----------| | <1000 | 自动发放 | - | - | | 1000-9999 | 风控审核 | 风控专员 | 24h | | 10000-49999 | 风控→财务审批 | 风控专员→财务经理 | 24h+24h | | ≥50000 | 风控→财务→总监 | 三级审批 | 24h+24h+48h | --- ### 8.3 风险处理流程 ```mermaid flowchart TD A[风险检测] --> B{是否异常?} B -->|否| C[忽略] B -->|是| D[标记风险] D --> E{处理方式} E -->|自动| F[自动拦截] E -->|人工| G[人工审核] F --> H[记录日志] G --> I{审核结果} I -->|确认| J[执行处理] I -->|误报| C J --> K[冻结/警告/限制] K --> L[通知用户] L --> M[复核] M --> N[归档] H --> M ``` --- ### 8.4 用户管理流程 ```mermaid flowchart TD A[用户注册] --> B{实名认证?} B -->|否| C[待认证] B -->|是| D[提交实名] D --> E{认证结果} E -->|通过| F[激活] E -->|拒绝| G[认证失败] F --> H[正常使用] H --> I{异常检测} I -->|正常| H I -->|异常| J{异常类型} J -->|轻微| K[警告] J -->|严重| L[冻结] K --> H L --> M{申诉?} M -->|是| N[申诉处理] M -->|否| O[冻结状态] N --> P{申诉结果} P -->|通过| Q[解冻] P -->|拒绝| O Q --> H ``` --- ### 8.5 通用审批流程 ```mermaid flowchart TD A[提交申请] --> B[一级审批] B --> C{审批结果} C -->|通过| D{需要二级?} C -->|拒绝| E[返回修改] D -->|是| F[二级审批] D -->|否| G[执行操作] F --> H{审批结果} H -->|通过| G H -->|拒绝| E G --> I[流程完成] E --> J[修改申请] J --> A ``` **审批超时机制**: | 超时比例 | 动作 | 通知方式 | |----------|------|----------| | 50% | 提醒 | 站内信、邮件 | | 80% | 再次提醒 | 站内信、邮件、短信 | | 100% | 自动升级 | 自动转交上级 | --- ## 9. 功能清单(按钮级) ### 9.1 仪表盘模块 **9.1.1 仪表盘首页** - 路径:`/dashboard` - 权限要求:`dashboard.view.*` | 操作按钮 | 权限要求 | 数据范围 | 说明 | |----------|----------|----------|------| | 查看全部仪表盘 | dashboard.view.all | ALL | 仅超级管理员/系统管理员/总监可见 | | 查看部门仪表盘 | dashboard.view.department | DEPARTMENT | 经理及以上可见 | | 查看个人仪表盘 | dashboard.view.own | OWN | 所有人可见 | | 刷新数据 | dashboard.view.own | - | 刷新当前数据 | | 导出报表 | dashboard.export | 根据角色 | 导出Excel/CSV | | 配置仪表盘 | dashboard.config | - | 自定义面板 | --- **9.1.2 实时监控** - 路径:`/dashboard/monitor` - 权限要求:`dashboard.monitor.view` | 操作按钮 | 权限要求 | 说明 | |----------|----------|------| | 查看实时数据 | dashboard.chart.realtime | 实时刷新 | | 查看历史趋势 | dashboard.chart.history | 历史曲线 | | 查看KPI指标 | dashboard.kpi.view | 关键指标展示 | | 配置告警阈值 | dashboard.kpi.config | 设置阈值 | --- ### 9.2 活动管理模块 **9.2.1 活动列表页** - 路径:`/activities` - 权限要求:`activity.list.view.*` | 操作按钮 | 权限要求 | 数据范围 | 业务规则 | |----------|----------|----------|----------| | 新建活动 | activity.create.submit | - | 跳转创建页面 | | 导出数据 | activity.export.execute | 根据角色 | 导出Excel | | 查看详情 | activity.detail.view | 根据角色 | 跳转详情页 | | 编辑 | activity.edit.submit | 根据角色 | 草稿/暂停状态可编辑 | | 删除 | activity.delete.execute | 根据角色 | 仅草稿状态可删除 | | 发布 | activity.publish.execute | 根据角色 | 审批通过后可发布 | | 暂停 | activity.pause.execute | 根据角色 | 进行中可暂停 | | 恢复 | activity.resume.execute | 根据角色 | 已暂停可恢复 | | 结束 | activity.end.execute | 根据角色 | 进行中可结束 | | 复制 | activity.clone.execute | 根据角色 | 复制为草稿 | --- **9.2.2 活动创建/编辑页** - 路径:`/activities/create`, `/activities/:id/edit` - 权限要求:`activity.create.submit`, `activity.edit.submit` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 保存草稿 | activity.create.submit | 保存为草稿状态 | | 提交审批 | activity.create.submit | 提交后进入审批流程 | | 取消 | - | 返回列表页 | | 上一步/下一步 | - | 步骤导航 | | 选择模板 | activity.template.view | 选择活动模板 | | 配置活动规则 | activity.config.edit | 设置活动规则 | | 设置奖励 | reward.apply.submit | 配置奖励规则 | --- **9.2.3 活动详情页** - 路径:`/activities/:id` - 权限要求:`activity.detail.view` | 操作按钮 | 权限要求 | 数据范围 | 业务规则 | |----------|----------|----------|----------| | 编辑 | activity.edit.submit | 根据角色 | 根据状态判断 | | 删除 | activity.delete.execute | 根据角色 | 仅草稿可删除 | | 发布 | activity.publish.execute | 根据角色 | 审批通过后可发布 | | 暂停/恢复 | activity.pause/resume.execute | 根据角色 | 进行中/暂停状态 | | 结束 | activity.end.execute | 根据角色 | 进行中可结束 | | 查看统计 | activity.detail.statistics | 根据角色 | 数据统计 | | 导出数据 | activity.export.execute | 根据角色 | 导出参与数据 | | 查看参与者 | activity.participant.view | 根据角色 | 参与用户列表 | | 生成海报 | activity.poster.generate | - | 生成推广海报 | --- ### 9.3 用户管理模块 **9.3.1 用户列表页** - 路径:`/users` - 权限要求:`user.list.view.*` | 操作按钮 | 权限要求 | 数据范围 | 业务规则 | |----------|----------|----------|----------| | 新建用户 | user.create.submit | - | 跳转创建页面 | | 导出数据 | user.detail.export | 根据角色 | 导出用户信息 | | 查看详情 | user.detail.view | 根据角色 | 跳转详情页 | | 编辑 | user.edit.submit | 根据角色 | 修改用户信息 | | 冻结 | user.freeze.execute | 根据角色 | 冻结用户账号 | | 解冻 | user.unfreeze.execute | 根据角色 | 解冻用户账号 | | 实名认证 | user.authenticate.execute | 根据角色 | 审核实名认证 | | 分配权限 | user.permission.assign | - | 分配功能权限 | | 分配角色 | user.role.assign | - | 分配用户角色 | | 添加标签 | user.tag.add | - | 给用户打标签 | --- **9.3.2 用户详情页** - 路径:`/users/:id` - 权限要求:`user.detail.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 编辑 | user.edit.submit | 修改基本信息 | | 冻结 | user.freeze.execute | 冻结账号 | | 解冻 | user.unfreeze.execute | 解冻账号 | | 查看邀请关系 | user.invite.view | 查看邀请树 | | 查看积分 | user.points.view | 查看积分记录 | | 查看奖励 | user.reward.view | 查看奖励记录 | | 查看投诉 | user.complaint.view | 查看投诉记录 | | 加入白名单 | user.whitelist.add | 添加到白名单 | | 加入黑名单 | user.blacklist.add | 添加到黑名单 | | 调整积分 | user.points.adjust | 手动调整积分 | --- ### 9.4 奖励管理模块 **9.4.1 奖励列表页** - 路径:`/rewards` - 权限要求:`reward.list.view.*` | 操作按钮 | 权限要求 | 数据范围 | 业务规则 | |----------|----------|----------|----------| | 申请奖励 | reward.apply.submit | - | 跳转申请页面 | | 导出数据 | reward.export.execute | 根据角色 | 导出Excel | | 查看详情 | reward.detail.view | 根据角色 | 查看详细信息 | | 审批 | reward.apply.approve | 根据角色 | 审批奖励申请 | | 发放 | reward.grant.execute | 根据角色 | 执行发放 | | 取消发放 | reward.grant.cancel | 根据角色 | 取消待发放 | | 对账 | reward.reconcile.execute | 根据角色 | 执行对账 | --- **9.4.2 奖励申请页** - 路径:`/rewards/apply` - 权限要求:`reward.apply.submit` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 提交申请 | reward.apply.submit | 提交后进入审批流 | | 保存草稿 | reward.apply.submit | 保存为草稿 | | 取消 | - | 返回列表页 | --- ### 9.5 风险管理模块 **9.5.1 风险列表页** - 路径:`/risks` - 权限要求:`risk.list.view.*` | 操作按钮 | 权限要求 | 数据范围 | 业务规则 | |----------|----------|----------|----------| | 查看详情 | risk.detail.view | 根据角色 | 查看风险详情 | | 处理告警 | risk.alert.handle | 根据角色 | 处理风险告警 | | 配置告警 | risk.alert.config | - | 配置告警规则 | | 执行检查 | risk.check.execute | - | 手动触发检查 | | 拦截操作 | risk.block.execute | - | 拦截风险操作 | | 解除拦截 | risk.block.release | - | 解除拦截 | --- **9.5.2 风控规则页** - 路径:`/risks/rules` - 权限要求:`risk.rule.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 新建规则 | risk.rule.create | 创建风控规则 | | 编辑 | risk.rule.edit | 修改规则 | | 删除 | risk.rule.delete | 删除规则 | | 启用 | risk.rule.enable | 启用规则 | | 禁用 | risk.rule.disable | 禁用规则 | | 导入规则 | risk.rule.create | 批量导入 | | 导出规则 | risk.rule.view | 批量导出 | --- ### 9.6 审批中心模块 **9.6.1 审批列表页** - 路径:`/approvals` - 权限要求:`approval.pending.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 查看待审批 | approval.pending.view | 我的待办 | | 查看已审批 | approval.my.approve | 我已审批 | | 查看我提交的 | approval.my.submit | 我提交的申请 | | 审批通过 | approval.execute.approve | 通过申请 | | 审批拒绝 | approval.execute.reject | 拒绝申请 | | 转交 | approval.execute.transfer | 转交他人 | | 批量审批 | approval.batch.execute | 批量通过/拒绝 | | 添加意见 | approval.comment.add | 添加审批意见 | --- ### 9.7 系统配置模块 **9.7.1 系统配置页** - 路径:`/system/config` - 权限要求:`system.config.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 查看配置 | system.config.view | 查看所有配置 | | 编辑配置 | system.config.edit | 修改配置项 | | 清除缓存 | system.cache.clear | 清理缓存 | | 配置缓存 | system.cache.config | 缓存策略 | --- **9.7.2 API密钥管理** - 路径:`/system/api-keys` - 权限要求:`system.api-key.create` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 创建密钥 | system.api-key.create | 新建API密钥 | | 查看密钥 | system.api-key.view | 查看密钥详情 | | 禁用密钥 | system.api-key.disable | 禁用密钥 | | 启用密钥 | system.api-key.enable | 启用密钥 | | 删除密钥 | system.api-key.delete | 删除密钥 | --- ### 9.8 权限管理模块 **9.8.1 角色管理页** - 路径:`/permissions/roles` - 权限要求:`permission.role.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 新建角色 | permission.role.create | 创建角色 | | 编辑角色 | permission.role.edit | 修改角色 | | 删除角色 | permission.role.delete | 删除角色 | | 分配权限 | permission.role.assign | 配置角色权限 | --- **9.8.2 用户授权页** - 路径:`/permissions/users` - 权限要求:`permission.user.view` | 操作按钮 | 权限要求 | 业务规则 | |----------|----------|----------| | 查看权限 | permission.user.view | 查看用户权限 | | 分配权限 | permission.user.assign | 分配功能权限 | | 撤销权限 | permission.user.revoke | 撤销权限 | | 分配角色 | permission.user.assign | 分配用户角色 | | 配置数据权限 | permission.data.config | 设置数据范围 | --- ## 10. 实施建议 ### 10.1 分阶段实施 | 阶段 | 时间 | 内容 | |------|------|------| | 第1阶段 | 2周 | 角色和权限基础框架 | | 第2阶段 | 2周 | 数据权限实现 | | 第3阶段 | 3周 | 审批流引擎 | | 第4阶段 | 1周 | 测试和优化 | ### 10.2 数据库设计要点 #### 10.2.1 核心表结构 **1. 角色表(sys_role)** ```sql CREATE TABLE sys_role ( id BIGINT PRIMARY KEY AUTO_INCREMENT, role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色代码', role_name VARCHAR(100) NOT NULL COMMENT '角色名称', role_level VARCHAR(20) NOT NULL COMMENT '角色层级:SYSTEM/MANAGER/EXECUTOR/AUDIT', data_scope VARCHAR(20) NOT NULL COMMENT '数据权限:ALL/DEPARTMENT/OWN', description VARCHAR(500) COMMENT '角色描述', status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态:ENABLED/DISABLED', created_by BIGINT COMMENT '创建人', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` **2. 权限表(sys_permission)** ```sql CREATE TABLE sys_permission ( id BIGINT PRIMARY KEY AUTO_INCREMENT, permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限代码', permission_name VARCHAR(100) NOT NULL COMMENT '权限名称', module_code VARCHAR(50) NOT NULL COMMENT '模块代码', resource_code VARCHAR(50) COMMENT '资源代码', operation_code VARCHAR(50) COMMENT '操作代码', data_scope VARCHAR(20) COMMENT '数据范围:ALL/DEPARTMENT/OWN', description VARCHAR(500) COMMENT '权限描述', status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` **3. 用户角色关联表(sys_user_role)** ```sql CREATE TABLE sys_user_role ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL COMMENT '用户ID', role_id BIGINT NOT NULL COMMENT '角色ID', department_id BIGINT COMMENT '部门ID', created_by BIGINT COMMENT '分配人', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_user_role (user_id, role_id, department_id) ); ``` **4. 角色权限关联表(sys_role_permission)** ```sql CREATE TABLE sys_role_permission ( id BIGINT PRIMARY KEY AUTO_INCREMENT, role_id BIGINT NOT NULL COMMENT '角色ID', permission_id BIGINT NOT NULL COMMENT '权限ID', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_role_permission (role_id, permission_id) ); ``` **5. 部门表(sys_department)** ```sql CREATE TABLE sys_department ( id BIGINT PRIMARY KEY AUTO_INCREMENT, dept_name VARCHAR(100) NOT NULL COMMENT '部门名称', parent_id BIGINT COMMENT '父部门ID', dept_code VARCHAR(50) COMMENT '部门编码', leader_id BIGINT COMMENT '部门负责人', sort_order INT DEFAULT 0 COMMENT '排序', status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` **6. 审批流程配置表(sys_approval_flow)** ```sql CREATE TABLE sys_approval_flow ( id BIGINT PRIMARY KEY AUTO_INCREMENT, flow_code VARCHAR(50) NOT NULL UNIQUE COMMENT '流程代码', flow_name VARCHAR(100) NOT NULL COMMENT '流程名称', trigger_event VARCHAR(100) NOT NULL COMMENT '触发事件', conditions JSON COMMENT '触发条件', nodes JSON NOT NULL COMMENT '审批节点配置', timeout_hours INT DEFAULT 24 COMMENT '超时时间(小时)', timeout_action VARCHAR(20) DEFAULT 'ESCALATE' COMMENT '超时动作', status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` **7. 审批记录表(sys_approval_record)** ```sql CREATE TABLE sys_approval_record ( id BIGINT PRIMARY KEY AUTO_INCREMENT, flow_id BIGINT NOT NULL COMMENT '流程配置ID', biz_type VARCHAR(50) NOT NULL COMMENT '业务类型', biz_id BIGINT NOT NULL COMMENT '业务ID', current_node INT NOT NULL COMMENT '当前节点', applicant_id BIGINT NOT NULL COMMENT '申请人', status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态', current_approver_id BIGINT COMMENT '当前审批人', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` **8. 审批历史表(sys_approval_history)** ```sql CREATE TABLE sys_approval_history ( id BIGINT PRIMARY KEY AUTO_INCREMENT, record_id BIGINT NOT NULL COMMENT '审批记录ID', node_index INT NOT NULL COMMENT '节点索引', approver_id BIGINT NOT NULL COMMENT '审批人', action VARCHAR(20) NOT NULL COMMENT '操作:APPROVE/REJECT/TRANSFER', comment TEXT COMMENT '审批意见', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` **9. 权限审计日志表(sys_permission_audit)** ```sql CREATE TABLE sys_permission_audit ( id BIGINT PRIMARY KEY AUTO_INCREMENT, operator_id BIGINT NOT NULL COMMENT '操作人ID', operation_type VARCHAR(50) NOT NULL COMMENT '操作类型:ASSIGN/REVOKE/BYPASS', target_type VARCHAR(20) NOT NULL COMMENT '目标类型:USER/ROLE/PERMISSION', target_id BIGINT NOT NULL COMMENT '目标ID', change_detail JSON COMMENT '变更详情', ip_address VARCHAR(50) COMMENT 'IP地址', reason VARCHAR(500) COMMENT '变更原因', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` **10. 数据敏感字段配置表(sys_sensitive_field)** ```sql CREATE TABLE sys_sensitive_field ( id BIGINT PRIMARY KEY AUTO_INCREMENT, table_name VARCHAR(50) NOT NULL COMMENT '表名', field_name VARCHAR(50) NOT NULL COMMENT '字段名', field_type VARCHAR(20) NOT NULL COMMENT '字段类型:PHONE/ID_CARD/BANK_CARD/EMAIL', mask_type VARCHAR(20) NOT NULL COMMENT '脱敏方式:MASK/HIDE/HASH', mask_pattern VARCHAR(50) COMMENT '脱敏规则', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` #### 10.2.2 权限判断核心逻辑 > ⚠️ **技术建议**:数据权限过滤建议在数据库层实现(视图或行级安全策略),避免大数据量时应用层性能问题。 ```sql -- 数据权限视图示例(MySQL) CREATE VIEW v_activity_with_scope AS SELECT a.*, CASE WHEN u.data_scope = 'ALL' THEN 1 WHEN u.data_scope = 'DEPARTMENT' AND a.department_id IN ( SELECT d.id FROM sys_department d WHERE d.id = u.department_id OR d.parent_id = u.department_id ) THEN 1 WHEN u.data_scope = 'OWN' AND a.created_by = u.id THEN 1 ELSE 0 END AS has_access FROM activity a JOIN user u ON a.created_by = u.id WHERE u.data_scope != 'RESTRICTED'; ``` ```java // 权限判断服务 @Service public class PermissionService { @Autowired private RolePermissionMapper rolePermissionMapper; @Autowired private RedisTemplate redisTemplate; private static final String PERMISSION_CACHE_KEY = "user:permissions:"; private static final long CACHE_EXPIRE_MINUTES = 30; /** * 检查用户是否拥有指定权限(带缓存) */ public boolean hasPermission(Long userId, String permissionCode) { // 1. 先从缓存获取 Set permissions = getCachedPermissions(userId); if (permissions != null) { return permissions.contains(permissionCode); } // 2. 缓存未命中,从数据库查询 permissions = loadUserPermissions(userId); // 3. 存入缓存 cachePermissions(userId, permissions); return permissions.contains(permissionCode); } /** * 权限变更时清除缓存 */ public void clearPermissionCache(Long userId) { redisTemplate.delete(PERMISSION_CACHE_KEY + userId); } /** * 过滤数据范围(防止SQL注入) */ public List filterByDataScope(Long userId, List dataList, DataScopeFilter filter) { User user = getUser(userId); DataScope scope = getUserDataScope(user); switch (scope) { case ALL: return dataList; case DEPARTMENT: // 使用参数化查询,防止SQL注入 return filter.filterByDepartment(dataList, user.getDepartmentId()); case OWN: return filter.filterByOwner(dataList, user.getId()); default: return Collections.emptyList(); } } } ``` #### 10.2.2.1 权限变更审计 ```java // 权限变更审计服务 @Service public class PermissionAuditService { @Autowired private AuditLogMapper auditLogMapper; /** * 记录权限变更审计日志 */ public void logPermissionChange(PermissionChangeEvent event) { AuditLog log = new AuditLog(); log.setOperatorId(event.getOperatorId()); log.setOperationType("PERMISSION_CHANGE"); log.setTargetType(event.getTargetType()); log.setTargetId(event.getTargetId()); log.setChangeDetail(JSON.toJSONString(event.getChanges())); log.setIpAddress(event.getIpAddress()); log.setCreatedAt(new Date()); auditLogMapper.insert(log); } /** * 记录绕过审批操作(超级管理员) */ public void logBypassApproval(BypassApprovalEvent event) { AuditLog log = new AuditLog(); log.setOperatorId(event.getOperatorId()); log.setOperationType("APPROVAL_BYPASS"); log.setTargetType(event.getBizType()); log.setTargetId(event.getBizId()); log.setChangeDetail("原因: " + event.getReason()); log.setIpAddress(event.getIpAddress()); log.setCreatedAt(new Date()); auditLogMapper.insert(log); } } ``` #### 10.2.2.2 多角色优先级规则 ```java // 多角色权限合并策略 public enum MultiRoleStrategy { // 权限并集:用户拥有任意一个角色有权限即可(默认) UNION, // 权限交集:用户必须拥有所有角色才有权限 INTERSECTION, // 优先级:按角色优先级,取最高优先级角色的权限 PRIORITY } // 角色优先级配置 public enum RolePriority { SUPER_ADMIN(100, "超级管理员"), SYSTEM_ADMIN(90, "系统管理员"), DIRECTOR(80, "总监"), MANAGER(60, "经理"), SPECIALIST(40, "专员"), AUDITOR(20, "审计员"); private final int value; private final String description; RolePriority(int value, String description) { this.value = value; this.description = description; } } ``` #### 10.2.3 Spring Boot 权限配置 ```java // 权限注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface RequirePermission { String value() default ""; DataScope dataScope() default DataScope.DEPARTMENT; } // 权限拦截器 @Component public class PermissionInterceptor extends HandlerInterceptorAdapter { @Autowired private PermissionService permissionService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod method = (HandlerMethod) handler; RequirePermission annotation = method.getMethodAnnotation(RequirePermission.class); if (annotation == null) { return true; } Long userId = getCurrentUserId(); String permission = annotation.value(); if (!permissionService.hasPermission(userId, permission)) { response.setStatus(HttpServletResponse.SC_FORBIDDEN); return false; } return true; } } ``` #### 10.2.4 Vue 前端路由守卫 ```typescript // router/permission.ts import { useUserStore } from '@/stores/user' export const setupPermissionGuard = (router: Router) => { router.beforeEach(async (to, from, next) => { const userStore = useUserStore() // 检查页面权限 if (to.meta.permission) { const hasPermission = userStore.hasPermission(to.meta.permission as string) if (!hasPermission) { next({ path: '/403' }) return } } // 检查数据范围 if (to.meta.dataScope) { const dataScope = to.meta.dataScope as string userStore.setDataScope(dataScope) } next() }) } // 使用示例 const routes: RouteRecordRaw[] = [ { path: '/activities', component: ActivityListView, meta: { permission: 'activity.list.view', dataScope: 'department' } } ] ``` #### 10.2.5 前端权限组件 ```vue ``` --- ## 12. 开发任务追踪 详见 `开发任务追踪.md` --- ## 13. 附录 ### 术语表 | 术语 | 说明 | |------|------| | RBAC | 基于角色的访问控制 | | 数据权限 | 控制用户可见数据的范围 | | 功能权限 | 控制用户可操作的功能 | | 审批流 | 业务流程中的审批环节 | | 权限点 | 最细粒度的权限单元 | --- **文档结束**