# 角色与晋升体系 - 功能设计文档 ## 1. 功能描述 本功能模块定义了系统内所有用户的角色身份、权限边界、以及角色之间的流转路径。它旨在建立一个清晰、安全、易于管理的权限体系,支撑起"公众参与"和"内部管理"两条核心业务线。 ## 2. 涉及角色 - **所有角色**: `公众监督员`, `业务主管`, `网格员`, `系统管理员`, `决策者`。 - **核心操作者**: `系统管理员 (ADMIN)` 是执行角色晋升和管理的主要操作者。 ## 3. 业务规则 ### 3.1 角色定义与权限 - **公众监督员 (PUBLIC_SUPERVISOR)**: 外部用户,只能使用NEPS端,仅能查看和管理自己提交的反馈。 - **业务主管 (SUPERVISOR)**: 内部核心**业务管理者**。使用NEPM管理端,负责其管辖区域内的**任务创建、分配、审核、取消**等全生命周期管理。 - **网格员 (GRID_WORKER)**: 内部核心**任务执行者**。使用NEPG端,负责接收、执行和提交任务。 - **系统管理员 (ADMIN)**: 内部核心**系统维护者**。使用NEPM管理端,负责用户账户管理(审批、创建、晋升)、系统配置等,**不参与日常业务流程**。 - **决策者 (DECISION_MAKER)**: 内部高级观察用户,使用NEPV端,拥有对所有统计和可视化数据的**只读权限**。 ### 3.2 角色晋升规则 - 晋升是**单向**的、**逐级**的。 - **禁止跨级晋升**。 - **`PUBLIC_SUPERVISOR` -> `GRID_WORKER` (入职)**: 由用户在NEPS端主动提交申请,经由**系统管理员(ADMIN)**在NEPM端审批通过,代表用户正式成为内部员工。 - **`GRID_WORKER` -> `SUPERVISOR` (晋升)**: 由其直属上级或**系统管理员(ADMIN)**在NEPM端为其执行`promote()`操作,代表从一线执行者晋升为业务管理者。 - **`ADMIN` 与 `DECISION_MAKER`**: 特殊角色,不参与业务晋升流。由系统更高权限的管理员在后台直接配置。 ### 3.3 数据模型映射 - **实体关系**: 一个 `User` 实体**拥有一个** `Role` 属性。 - **关键字段**: 角色和状态的管理主要依赖 `user_account` 表中的以下字段: - `role` (Enum: `PUBLIC_SUPERVISOR`, `GRID_WORKER`, `SUPERVISOR`, `ADMIN`, `DECISION_MAKER`): 定义用户的角色。 - `status` (Enum: `PENDING_APPROVAL`, `ACTIVE`, `REJECTED`, `DISABLED`): 定义用户的状态。新申请的用户状态为`PENDING_APPROVAL`,审批通过后为`ACTIVE`。 - **操作**: 角色晋升或状态变更是对 `user_account` 表中特定记录的 `role` 和 `status` 字段的原子更新。 ### 3.4 权限矩阵 (Permission Matrix) | 功能模块 | API 端点 (示例) | `PUBLIC_SUPERVISOR` | `GRID_WORKER` | `SUPERVISOR` | `ADMIN` | `DECISION_MAKER` | | :--- | :--- | :---: | :---: | :---: | :---: | :---: | | **公众反馈** | `POST /api/feedback` | C | - | - | - | - | | | `GET /api/feedback/my` | R | - | - | - | - | | **任务处理** | `GET /api/worker/tasks` | - | R | - | - | - | | | `POST /api/worker/tasks/{id}/submit`| - | U | - | - | - | | **任务管理** | `GET /api/supervisor/tasks` | - | - | R | - | - | | | `POST /api/supervisor/tasks` | - | - | C | - | - | | | `PUT /api/supervisor/tasks/{id}` | - | - | U | - | - | | | `DELETE /api/supervisor/tasks/{id}`| - | - | D | - | - | | | `POST /api/supervisor/tasks/{id}/approve` | - | - | **Approve** | - | - | | **用户管理** | `GET /api/admin/users` | - | - | R (下属) | R (全部) | - | | | `POST /api/admin/users/{id}/promote` | - | - | - | **Promote** | - | | **入职审批** | `GET /api/admin/approvals` | - | - | - | R | - | | | `POST /api/admin/approvals/{id}/approve` | - | - | - | **Approve** | - | | **数据大屏** | `GET /api/data-v/*` | - | - | - | R | R | | *C=Create, R=Read, U=Update, D=Delete* | ## 4. 功能实现流程 ### 4.1 总体晋升流程 ```mermaid graph TD subgraph "外部用户区 (NEPS)" A[公众注册
默认角色: PUBLIC_SUPERVISOR] --> B{个人中心}; B --> C[提交入职申请
成为网格员]; end subgraph "内部管理区 (NEPM)" C --> D["管理员(ADMIN)审批列表"]; D -- 通过 --> E[角色变更为 GRID_WORKER]; E --> F{用户管理}; F -- 管理员执行promote() --> G[角色变更为 SUPERVISOR]; end subgraph "后台配置" H[系统最高管理员] --> I[为特定用户分配
ADMIN/DECISION_MAKER角色]; end style A fill:#E3F2FD,stroke:#333,stroke-width:2px style E fill:#C8E6C9,stroke:#333,stroke-width:2px style G fill:#FFD54F,stroke:#333,stroke-width:2px style I fill:#FFECB3,stroke:#333,stroke-width:2px ``` ### 4.2 申请入职时序图 ```mermaid sequenceDiagram participant User as "公众监督员 (NEPS)" participant Frontend as "前端 (NEPS)" participant Backend as "后端 (API)" participant Admin as "系统管理员 (NEPM)" User->>Frontend: 点击"申请成为网格员" Frontend->>User: 显示申请信息填写表单 User->>Frontend: 填写并提交申请 Frontend->>Backend: POST /api/users/apply-for-worker (携带申请信息) Backend->>Backend: 创建申请记录, 更新用户状态为`PENDING_APPROVAL` Backend-->>Frontend: 申请已提交 (200 OK) Frontend->>User: 显示"申请已提交,等待管理员审批" Admin->>Backend: (在NEPM端) GET /api/admin/approvals Backend-->>Admin: 返回待审批用户列表 Admin->>Backend: POST /api/admin/approvals/{userId}/approve Backend->>Backend: 校验权限, 更新用户role为`GRID_WORKER`, status为`ACTIVE` Backend-->>Admin: 审批成功 (200 OK) ``` ### 4.3 角色晋升时序图 ```mermaid sequenceDiagram participant Admin as "系统管理员 (NEPM)" participant Frontend as "前端 (NEPM)" participant Backend as "后端 (API)" participant User as "被晋升的用户 (Grid Worker)" Admin->>Frontend: 在用户管理列表, 点击"晋升为主管" Frontend->>Frontend: 弹出二次确认对话框 Admin->>Frontend: 确认操作 Frontend->>Backend: POST /api/admin/users/{userId}/promote Backend->>Backend: 校验管理员权限 Backend->>Backend: 校验目标用户当前角色为`GRID_WORKER` Backend->>Backend: 更新用户role为`SUPERVISOR` Backend-->>Frontend: 晋升成功 (200 OK) Frontend->>Admin: 刷新列表, 显示用户新角色 User->>Backend: (下次登录或刷新页面时) Backend-->>User: 返回更新后的角色信息和权限 Note right of User: 用户界面(菜单、操作按钮)随新角色动态更新 ``` ## 5. API接口设计 ### 5.1 用户申请成为网格员 - **URL**: `POST /api/users/apply-for-worker` - **权限**: `PUBLIC_SUPERVISOR` - **请求体**: `applicationReason`, `experience` - **响应**: `200 OK` ### 5.2 管理员获取待审批列表 - **URL**: `GET /api/admin/approvals` - **权限**: `ADMIN` - **响应**: `200 OK`, 返回用户申请列表 `[{userId, name, applicationTime, ...}]` ### 5.3 管理员审批 - **URL**: `POST /api/admin/approvals/{userId}/approve` 或 `.../reject` - **权限**: `ADMIN` - **请求体**: (可选) `rejectionReason` - **响应**: `200 OK` ### 5.4 管理员晋升用户 - **URL**: `POST /api/admin/users/{userId}/promote` - **权限**: `ADMIN` - **响应**: `200 OK` ## 6. 界面设计要求 ### 6.1 NEPS端 (公众监督员) - 在"个人中心"或"我的"页面,应有一个醒目的入口,如"申请成为网格员"按钮。 - 点击后, 弹出一个表单或新页面, 要求用户填写申请理由、相关经验等附加信息, 并提交。 - 提交后,按钮应变为"审批中..."的不可点击状态。 - 用户的申请状态(待审批、已通过、已驳回)应在个人中心清晰展示。若被驳回,应显示驳回原因。 ### 6.2 NEPM端 (管理员 ADMIN) - 在侧边栏应有"用户管理"和"入职审批"两个菜单项。 - **入职审批页面**: 以列表形式展示所有待审批的申请,包含申请人姓名、申请时间、申请理由等。管理员可点击"通过"或"驳回"。操作后有明确的成功提示,且该条目从列表中移除。 - **用户管理页面**: - 以表格形式展示其管辖范围内的所有内部用户列表(包括网格员、主管),并可通过角色、状态进行筛选。 - 表格的"操作"列中,应包含对符合条件的`GRID_WORKER`的"晋升为主管"按钮。 - 点击"晋升"按钮,应有二次确认弹窗,明确告知"用户XXX的角色将从GridWorker变更为Supervisor",防止误操作。操作成功后,该用户的角色信息在表格中应立即更新。