pangu-user-platform/docs/业务功能按钮权限统一修复方案.md

113 lines
5.8 KiB
Markdown
Raw Permalink 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.

# 业务功能按钮权限统一修复方案
**问题**:角色管理中已取消「新增/修改/删除」等菜单权限后,学生管理、会员管理等自建业务页面上,对应按钮仍显示且可操作,与权限配置不一致。
**原因**:后端接口已使用 `@SaCheckPermission` 做权限校验(无权限会 403但前端列表/表格上的「新增」「编辑」「删除」「导入」等按钮**未做权限控制**,未使用项目已有的 `v-hasPermi` 指令,导致仅靠菜单可见性无法隐藏这些操作按钮。
**修复思路**:在**前端**为所有业务模块的增删改等操作按钮增加 `v-hasPermi="['权限字符']"`,与后端 `@SaCheckPermission` 使用的权限字符一致。不修改后端(后端已校验),不修改菜单/角色配置方式。
---
## 一、涉及范围
以下为**自建业务**页面,需统一加按钮权限控制(系统管理下用户/角色/部门等已有 `v-hasPermi`,不在此次范围):
| 模块 | 前端路径 | 后端权限前缀 |
|------------|----------|--------------|
| 学生管理 | `views/business/student/index.vue` | `business:student:*` |
| 会员管理 | `views/business/member/index.vue` | `business:member:*` |
| 学校管理 | `views/business/school/index.vue` | `business:school:*` |
| 应用管理 | `views/business/application/index.vue` | `business:application:*` |
| 接口字典 | `views/business/apiDict/index.vue` | `business:apiDict:*` |
| 基础数据-年级 | `views/business/base/grade/index.vue` | `business:grade:*` |
| 基础数据-班级 | `views/business/base/class/index.vue` | `business:class:*` |
| 基础数据-学科 | `views/business/base/subject/index.vue` | `business:subject:*` |
| 基础数据-区域 | `views/business/base/region/index.vue` | `business:region:*` |
---
## 二、各页面具体修改
### 1. 学生管理 `student/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:student:add']"`
- 工具栏「导入」:`v-hasPermi="['business:student:import']"`
- 表格操作「编辑」:`v-hasPermi="['business:student:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:student:remove']"`
### 2. 会员管理 `member/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:member:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:member:edit']"`
- 表格操作「重置密码」:`v-hasPermi="['business:member:resetPwd']"`
- 表格操作「删除」:`v-hasPermi="['business:member:remove']"`
### 3. 学校管理 `school/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:school:add']"`
- 表格内「编辑」:`v-hasPermi="['business:school:edit']"`
- 表格内「新增年级」:`v-hasPermi="['business:school:edit']"`
- 表格内「新增班级」:`v-hasPermi="['business:school:edit']"`
- 表格内「删除」(学校/年级/班级):`v-hasPermi="['business:school:remove']"`
### 4. 应用管理 `application/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:application:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:application:edit']"`
- 表格操作「重置密钥」:`v-hasPermi="['business:application:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:application:remove']"`
### 5. 接口字典 `apiDict/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:apiDict:add']"`
- 工具栏「批量删除」:`v-hasPermi="['business:apiDict:remove']"`
- 表格操作「编辑」:`v-hasPermi="['business:apiDict:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:apiDict:remove']"`
### 6. 基础数据 - 年级 `base/grade/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:grade:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:grade:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:grade:remove']"`
### 7. 基础数据 - 班级 `base/class/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:class:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:class:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:class:remove']"`
### 8. 基础数据 - 学科 `base/subject/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:subject:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:subject:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:subject:remove']"`
### 9. 基础数据 - 区域 `base/region/index.vue`
- 工具栏「新增」:`v-hasPermi="['business:region:add']"`
- 表格操作「新增下级」:`v-hasPermi="['business:region:add']"`
- 表格操作「编辑」:`v-hasPermi="['business:region:edit']"`
- 表格操作「删除」:`v-hasPermi="['business:region:remove']"`
---
## 三、技术说明
- **指令**:使用现有 `v-hasPermi``directive/permission/hasPermi.js`),无权限时移除 DOM与系统管理页面用法一致。
- **权限字符**:与后端 `@SaCheckPermission` 完全一致,保证「角色未勾选该权限 → 前端不显示按钮、后端接口 403」。
- **后端**:不改动,已具备接口级校验。
- **菜单/角色**:不改动,仅依赖现有「菜单权限」配置(角色管理里勾选的子权限如「学生新增」「学生修改」等)。
---
## 四、验收方式
1. 使用**分公司用户**(如 wuhan登录在角色管理中仅保留「学生管理」下的「学生查询」去掉「学生新增」「学生修改」「学生删除」「学生导入」。
2. 进入学生管理页:不应出现「新增」「导入」按钮,表格操作列不应出现「编辑」「删除」。
3. 对会员、学校、应用、接口字典、年级/班级/学科/区域做同类配置,验证对应按钮按权限显隐。
4. 超级管理员或拥有全部权限的角色,所有按钮仍正常显示。
---
**请确认是否按此方案执行修改,同意后再进行代码改动。**