- V21迁移: 创建10张权限系统表(sys_role, sys_permission等) - 添加角色实体(SysRole)、Repository、Service - 添加权限系统Schema验证测试(21个测试用例) Phase 1数据库表创建完成,Phase 2开始实施
1273 lines
42 KiB
Markdown
1273 lines
42 KiB
Markdown
# 蚊子系统管理后台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 模块划分
|
||
|
||
| 序号 | 模块代码 | 模块名称 | 权限点数量 |
|
||
|------|----------|----------|------------|
|
||
| 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
|
||
```
|
||
|
||
**审批规则**:
|
||
| 金额范围 | 审批流程 | 审批人 |
|
||
|----------|----------|--------|
|
||
| <1000 | 自动发放 | - |
|
||
| 1000-9999 | 风控审核 | 风控专员 |
|
||
| ≥10000 | 风控→财务审批 | 风控专员→财务经理 |
|
||
|
||
---
|
||
|
||
### 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<String, Object> 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<String> 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 <T> List<T> filterByDataScope(Long userId, List<T> 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
|
||
<!-- components/PermissionButton.vue -->
|
||
<template>
|
||
<el-tooltip v-if="!hasPermission" :content="disabledText" placement="top">
|
||
<span>
|
||
<slot></slot>
|
||
</span>
|
||
</el-tooltip>
|
||
<slot v-else></slot>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { computed } from 'vue'
|
||
import { useUserStore } from '@/stores/user'
|
||
|
||
const props = defineProps<{
|
||
permission: string
|
||
disabledText?: string
|
||
}>()
|
||
|
||
const userStore = useUserStore()
|
||
const hasPermission = computed(() => userStore.hasPermission(props.permission))
|
||
</script>
|
||
|
||
<!-- 使用示例 -->
|
||
<template>
|
||
<PermissionButton permission="activity.create.submit">
|
||
<el-button type="primary" @click="createActivity">新建活动</el-button>
|
||
</PermissionButton>
|
||
<PermissionButton permission="activity.delete.execute" disabled-text="仅草稿状态可删除">
|
||
<el-button type="danger" @click="deleteActivity">删除</el-button>
|
||
</PermissionButton>
|
||
</template>
|
||
```
|
||
|
||
---
|
||
|
||
## 12. 开发任务追踪
|
||
|
||
详见 `开发任务追踪.md`
|
||
|
||
---
|
||
|
||
## 13. 附录
|
||
|
||
### 术语表
|
||
|
||
| 术语 | 说明 |
|
||
|------|------|
|
||
| RBAC | 基于角色的访问控制 |
|
||
| 数据权限 | 控制用户可见数据的范围 |
|
||
| 功能权限 | 控制用户可操作的功能 |
|
||
| 审批流 | 业务流程中的审批环节 |
|
||
| 权限点 | 最细粒度的权限单元 |
|
||
|
||
---
|
||
|
||
**文档结束** |