# 权限管理规范

## ADDED Requirements

### Requirement: 权限列表展示

系统 SHALL 提供权限列表展示功能，以树形表格形式展示系统的完整权限结构。

#### Scenario: 展示权限树形列表

- **WHEN** 管理员访问权限管理页面
- **THEN** 系统以树形表格展示所有权限，包含以下字段：
  - 权限名称
  - 权限标识（permissionCode）
  - 权限类型（菜单/按钮/API）
  - 父级权限（如有）
  - 菜单路径（menu类型）
  - 图标（menu类型）
  - 排序序号
  - 状态（启用/禁用）
  - 创建时间
  - 操作按钮

#### Scenario: 按权限名称搜索

- **WHEN** 管理员在搜索框输入权限名称并点击查询
- **THEN** 系统返回名称包含该关键词的权限记录，保持树形结构

#### Scenario: 按权限标识搜索

- **WHEN** 管理员在搜索框输入权限标识并点击查询
- **THEN** 系统返回匹配该标识的权限记录及其父级权限

#### Scenario: 按权限类型筛选

- **WHEN** 管理员选择权限类型（菜单/按钮/API）并点击查询
- **THEN** 系统返回该类型的所有权限，保持树形结构

#### Scenario: 按权限状态筛选

- **WHEN** 管理员选择权限状态（启用/禁用）并点击查询
- **THEN** 系统返回该状态的所有权限

#### Scenario: 重置搜索条件

- **WHEN** 管理员点击重置按钮
- **THEN** 系统清空所有搜索条件并显示完整权限树

### Requirement: 新增权限

系统 SHALL 提供新增权限功能，允许管理员创建新的菜单、按钮或 API 权限。

#### Scenario: 打开新增权限对话框

- **WHEN** 管理员点击"新增权限"按钮
- **THEN** 系统弹出新增权限对话框，包含以下字段：
  - 权限名称（必填）
  - 权限标识（必填，唯一）
  - 权限类型（必选：菜单/按钮/API）
  - 父级权限（可选，树形选择）
  - 菜单路径（权限类型为菜单时必填）
  - 菜单图标（权限类型为菜单时可选）
  - 排序序号（可选，数字）
  - 状态（启用/禁用，默认启用）
  - 描述（可选）

#### Scenario: 成功创建权限

- **WHEN** 管理员填写完整信息并点击确定
- **THEN** 系统验证数据有效性，创建权限记录，关闭对话框，刷新权限列表，显示成功提示

#### Scenario: 权限标识重复

- **WHEN** 管理员输入已存在的权限标识并提交
- **THEN** 系统显示"权限标识已存在"错误提示，不创建记录

#### Scenario: 必填字段校验

- **WHEN** 管理员未填写必填字段并提交
- **THEN** 系统高亮显示未填写的必填字段，显示"请填写必填项"提示

### Requirement: 编辑权限

系统 SHALL 提供编辑权限功能，允许管理员修改已有权限的信息。

#### Scenario: 打开编辑权限对话框

- **WHEN** 管理员点击某个权限的"编辑"按钮
- **THEN** 系统弹出编辑对话框，预填充该权限的当前信息

#### Scenario: 成功更新权限

- **WHEN** 管理员修改信息并点击确定
- **THEN** 系统验证数据有效性，更新权限记录，关闭对话框，刷新列表，显示成功提示

#### Scenario: 不允许修改权限标识为重复值

- **WHEN** 管理员修改权限标识为已存在的其他标识并提交
- **THEN** 系统显示"权限标识已存在"错误提示，不更新记录

### Requirement: 删除权限

系统 SHALL 提供删除权限功能，允许管理员删除不再使用的权限。

#### Scenario: 删除单个权限（无子权限）

- **WHEN** 管理员点击某个无子权限的"删除"按钮并确认
- **THEN** 系统删除该权限记录，刷新列表，显示成功提示

#### Scenario: 删除权限前二次确认

- **WHEN** 管理员点击"删除"按钮
- **THEN** 系统弹出确认对话框，提示"确定要删除该权限吗？此操作不可撤销"

#### Scenario: 删除有子权限的权限

- **WHEN** 管理员尝试删除有子权限的权限
- **THEN** 系统提示"该权限下存在子权限，请先删除子权限"，不执行删除

#### Scenario: 删除已分配给角色的权限

- **WHEN** 管理员尝试删除已分配给角色的权限
- **THEN** 系统提示"该权限已分配给角色，请先从角色中移除该权限"，不执行删除

#### Scenario: 取消删除操作

- **WHEN** 管理员在确认对话框中点击取消
- **THEN** 系统关闭对话框，不删除权限

### Requirement: 批量删除权限

系统 SHALL 提供批量删除权限功能，允许管理员一次性删除多个权限。

#### Scenario: 选择多个权限并删除

- **WHEN** 管理员选中多个无子权限的权限并点击"批量删除"按钮并确认
- **THEN** 系统删除所有选中的权限，刷新列表，显示成功提示（如"成功删除 3 个权限"）

#### Scenario: 批量删除包含有子权限的权限

- **WHEN** 管理员选中的权限中包含有子权限的权限
- **THEN** 系统仅删除无子权限的权限，提示"部分权限存在子权限，已跳过删除"

### Requirement: 权限状态管理

系统 SHALL 提供权限状态切换功能，允许管理员启用或禁用权限。

#### Scenario: 切换权限状态

- **WHEN** 管理员点击权限的状态开关
- **THEN** 系统更新该权限的状态（启用↔禁用），刷新列表，显示成功提示

#### Scenario: 禁用父级权限

- **WHEN** 管理员禁用有子权限的权限
- **THEN** 系统同时禁用其所有子权限，提示"已同时禁用 X 个子权限"

### Requirement: 权限树形展示

系统 SHALL 以树形结构展示权限的层级关系，支持展开/折叠操作。

#### Scenario: 默认展开第一级

- **WHEN** 管理员首次访问权限管理页面
- **THEN** 系统默认展开第一级权限，其余层级折叠

#### Scenario: 展开/折叠权限节点

- **WHEN** 管理员点击权限节点的展开/折叠图标
- **THEN** 系统展开或折叠该节点的子权限

#### Scenario: 展开全部权限

- **WHEN** 管理员点击"全部展开"按钮
- **THEN** 系统展开所有权限节点

#### Scenario: 折叠全部权限

- **WHEN** 管理员点击"全部折叠"按钮
- **THEN** 系统折叠所有权限节点，仅显示第一级

### Requirement: 权限类型可视化区分

系统 SHALL 使用不同的视觉样式区分权限类型，提升可读性。

#### Scenario: 权限类型标签样式

- **WHEN** 列表中显示权限类型
- **THEN** 菜单权限显示为蓝色标签，按钮权限显示为绿色标签，API权限显示为橙色标签

#### Scenario: 权限类型图标

- **WHEN** 权限为菜单类型且配置了图标
- **THEN** 在权限名称前显示对应的菜单图标

### Requirement: 权限详情查看

系统 SHALL 提供权限详情查看功能，展示权限的完整信息。

#### Scenario: 查看权限详情

- **WHEN** 管理员点击权限的"查看"按钮
- **THEN** 系统弹出详情对话框，展示权限的所有字段信息，包括创建时间、更新时间等

### Requirement: 国际化支持

系统 SHALL 支持中英文双语界面，所有文案通过国际化文件管理。

#### Scenario: 中文界面显示

- **WHEN** 系统语言设置为中文
- **THEN** 所有界面文案显示为中文

#### Scenario: 英文界面显示

- **WHEN** 系统语言设置为英文
- **THEN** 所有界面文案显示为英文

### Requirement: 访问权限控制

系统 SHALL 限制权限管理页面的访问权限，仅超级管理员可访问。

#### Scenario: 超级管理员访问

- **WHEN** 超级管理员访问权限管理页面
- **THEN** 系统正常显示权限管理界面

#### Scenario: 普通管理员访问

- **WHEN** 普通管理员尝试访问权限管理页面
- **THEN** 系统显示"403 无权访问"页面或重定向到首页

### Requirement: 异常处理与用户反馈

系统 SHALL 在操作过程中提供清晰的用户反馈和错误处理。

#### Scenario: 操作成功反馈

- **WHEN** 用户执行新增/编辑/删除操作成功
- **THEN** 系统显示成功消息提示（如"权限创建成功"）

#### Scenario: API 请求失败处理

- **WHEN** API 请求失败或超时
- **THEN** 系统显示错误消息，并提示用户重试

#### Scenario: 数据加载状态

- **WHEN** 系统正在加载权限数据
- **THEN** 显示加载动画或骨架屏，防止用户误操作

#### Scenario: 空数据提示

- **WHEN** 权限列表为空
- **THEN** 系统显示"暂无权限数据，点击新增按钮创建权限"提示
