Files
Environment-Monitoring-System/Design/角色与晋升体系设计.md
ChuXun 4ce487588a 1
2025-10-19 20:31:01 +08:00

163 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 角色与晋升体系 - 功能设计文档
## 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[公众注册<br/>默认角色: PUBLIC_SUPERVISOR] --> B{个人中心};
B --> C[提交入职申请<br>成为网格员];
end
subgraph "内部管理区 (NEPM)"
C --> D["管理员(ADMIN)审批列表"];
D -- 通过 --> E[角色变更为 GRID_WORKER];
E --> F{用户管理};
F -- 管理员执行promote() --> G[角色变更为 SUPERVISOR];
end
subgraph "后台配置"
H[系统最高管理员] --> I[为特定用户分配<br/>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",防止误操作。操作成功后,该用户的角色信息在表格中应立即更新。