# role-permission Spec Delta

## MODIFIED Requirements

### Requirement: 角色类型与用户类型匹配

系统 SHALL 在分配角色时校验角色类型与用户类型的匹配关系：平台用户只能分配平台角色，代理/企业账号只能分配客户角色，超级管理员不允许分配角色。分配角色时支持传递空数组以清空账号的所有角色。

#### Scenario: 平台用户分配平台角色
- **WHEN** 为平台用户（user_type=2）分配平台角色（role_type=1）
- **THEN** 系统允许分配

#### Scenario: 平台用户分配客户角色
- **WHEN** 为平台用户（user_type=2）分配客户角色（role_type=2）
- **THEN** 系统拒绝分配并返回错误"角色类型与账号类型不匹配"

#### Scenario: 代理账号分配客户角色
- **WHEN** 为代理账号（user_type=3）分配客户角色（role_type=2）
- **THEN** 系统允许分配

#### Scenario: 代理账号分配平台角色
- **WHEN** 为代理账号（user_type=3）分配平台角色（role_type=1）
- **THEN** 系统拒绝分配并返回错误"角色类型与账号类型不匹配"

#### Scenario: 企业账号分配客户角色
- **WHEN** 为企业账号（user_type=4）分配客户角色（role_type=2）
- **THEN** 系统允许分配

#### Scenario: 超级管理员禁止分配角色
- **WHEN** 尝试为超级管理员（user_type=1）分配任何角色
- **THEN** 系统拒绝分配并返回错误 CodeInvalidParam "超级管理员不允许分配角色"

#### Scenario: 清空账号所有角色
- **WHEN** 调用分配角色接口时传递空数组 `role_ids: []`
- **THEN** 系统删除该账号的所有现有角色关联，返回成功

#### Scenario: 传递空数组给超级管理员
- **WHEN** 为超级管理员（user_type=1）调用分配角色接口且传递空数组
- **THEN** 系统拒绝操作并返回错误"超级管理员不允许分配角色"

---

## ADDED Requirements

### Requirement: 角色分配灵活性

系统 SHALL 支持灵活的角色分配操作：允许传递空数组清空所有角色，允许传递部分角色ID进行增量分配，不强制要求账号必须拥有角色。

#### Scenario: 创建无角色的平台用户
- **WHEN** 创建平台用户账号后未分配任何角色
- **THEN** 系统允许该状态，账号可正常登录但无权限访问受保护资源

#### Scenario: 清空代理账号的唯一角色
- **WHEN** 代理账号（user_type=3）拥有一个角色，调用分配角色接口传递空数组
- **THEN** 系统清空该代理账号的角色，账号变为无角色状态

#### Scenario: 增量分配角色
- **WHEN** 账号已有角色A，调用分配角色接口传递 `role_ids: [B, C]`
- **THEN** 系统跳过已存在的关联，只新增角色B和C（如果尚未分配）

#### Scenario: 角色分配验证规则调整
- **WHEN** 前端调用角色分配接口
- **THEN** `role_ids` 字段验证规则为 `omitempty`（可选），允许传递 null、空数组或角色ID列表
