# 用户与权限模块说明（`src/users`）

## 1. 目标

- 管理用户基础信息（姓名、手机号、角色、组织归属）。
- 维护 B 端角色权限边界和工程师绑定医院逻辑。

## 2. 角色枚举

- `SYSTEM_ADMIN`：系统管理员
- `HOSPITAL_ADMIN`：院管
- `DIRECTOR`：主任
- `LEADER`：组长
- `DOCTOR`：医生
- `ENGINEER`：工程师

## 3. 关键规则

- 医院内数据按 `hospitalId` 强隔离。
- 仅 `SYSTEM_ADMIN` 可执行工程师绑定医院。
- `SYSTEM_ADMIN/HOSPITAL_ADMIN` 可执行用户创建、编辑、删除。
- `DIRECTOR` 仅可只读查看本科室下级医生/组长。
- `LEADER` 仅可只读查看本小组医生列表。
- `HOSPITAL_ADMIN` 仅可操作本院非管理员账号。
- 用户组织字段校验：
  - 院管/医生/工程师等需有医院归属；
  - 主任/组长需有科室/小组等必要归属；
  - 系统管理员不能绑定院内组织字段。
- 更新用户时，仅允许医生调整 `departmentId/groupId`（后端强约束）。
- 科室/小组父级关系冻结：不允许通过更新接口迁移科室所属医院或小组所属科室。

## 4. 典型接口

- `GET /users`、`GET /users/:id`、`PATCH /users/:id`、`DELETE /users/:id`
- `POST /b/users/:id/assign-engineer-hospital`

其中院管侧的常用链路为：

- `POST /users`：创建本院用户
- `GET /users/:id`：查看本院用户详情
- `PATCH /users/:id`：修改本院用户信息
- `DELETE /users/:id`：删除本院无关联、且非管理员用户

其中主任侧的常用链路为：

- `GET /users`：查看本科室下级医生/组长
- `GET /users/:id`：查看本科室下级详情

其中组长侧的常用链路为：

- `GET /users`：查看本小组医生列表
- `GET /users/:id`：查看本小组医生详情

## 5. 开发改造建议

- 若增加角色，请同步修改：
  - Prisma `Role` 枚举
  - `roles.guard.ts` 与各 Service 权限判断
  - Swagger DTO 中文说明
