324 lines
7.9 KiB
Markdown
324 lines
7.9 KiB
Markdown
# 出国登记审批权限配置总结
|
||
|
||
## 📋 配置概览
|
||
|
||
**菜单名称**: 出国登记审批
|
||
**权限标识规范**: 二段式(`模块:操作`)
|
||
**按钮数量**: 4个
|
||
**最后更新**: 2025-10-08 v1.1
|
||
|
||
---
|
||
|
||
## 🔐 完整权限清单
|
||
|
||
### 1️⃣ 菜单权限(1个)
|
||
|
||
| 菜单名称 | 权限标识 | 说明 |
|
||
|---------|---------|------|
|
||
| 出国登记审批 | `rs:registration:list` | 菜单访问权限 |
|
||
|
||
---
|
||
|
||
### 2️⃣ 按钮权限(4个)
|
||
|
||
| 序号 | 按钮名称 | 权限标识 | 说明 |
|
||
|-----|---------|---------|------|
|
||
| 1 | 查询/查看详情 | `rs:registration:query` | 查询列表、查看详情 |
|
||
| 2 | 审批通过 | `rs:registration:approve` | 审批通过操作 |
|
||
| 3 | 审批拒绝 | `rs:registration:approve` | 审批拒绝操作(复用approve) |
|
||
| 4 | 导出 | `rs:registration:export` | 导出Excel |
|
||
|
||
**总计**: 1个菜单 + 4个按钮 = **5条sys_menu记录**
|
||
|
||
---
|
||
|
||
## 💡 核心设计原则
|
||
|
||
### ✅ 二段式权限标识
|
||
- **格式**: `模块:操作`
|
||
- **示例**: `rs:registration:approve`
|
||
- **优势**: 简洁明了,易于管理
|
||
|
||
### ✅ 权限复用策略
|
||
**审批通过和拒绝使用同一个权限**:`rs:registration:approve`
|
||
|
||
**原因**:
|
||
1. 业务逻辑统一:有审批权限的人,自然可以通过或拒绝
|
||
2. 简化权限管理:不需要为每个操作单独配置
|
||
3. 降低配置复杂度
|
||
|
||
### ✅ 删除批量操作
|
||
**已删除**:
|
||
- ~~批量审批通过~~
|
||
- ~~批量审批拒绝~~
|
||
|
||
**原因**:
|
||
- 简化权限配置
|
||
- 保持菜单简洁
|
||
- 后续如需批量操作,可在业务层实现
|
||
|
||
---
|
||
|
||
## 📊 菜单结构
|
||
|
||
```
|
||
📁 人事管理 / 出国管理
|
||
📄 出国登记审批 (rs:registration:list)
|
||
🔘 查询 (rs:registration:query)
|
||
🔘 审批通过 (rs:registration:approve)
|
||
🔘 审批拒绝 (rs:registration:approve)
|
||
🔘 导出 (rs:registration:export)
|
||
```
|
||
|
||
---
|
||
|
||
## 🗂️ 数据库配置
|
||
|
||
### sys_menu 表记录
|
||
|
||
| menu_id | menu_name | parent_id | order_num | menu_type | perms | remark |
|
||
|---------|-----------|-----------|-----------|-----------|-------|--------|
|
||
| 2001 | 出国登记审批 | 父菜单ID | 1 | C | rs:registration:list | 菜单 |
|
||
| 2001001 | 出国登记审批查询 | 2001 | 1 | F | rs:registration:query | 查询按钮 |
|
||
| 2001002 | 审批通过 | 2001 | 2 | F | rs:registration:approve | 审批通过按钮 |
|
||
| 2001003 | 审批拒绝 | 2001 | 3 | F | rs:registration:approve | 审批拒绝按钮 |
|
||
| 2001004 | 导出 | 2001 | 4 | F | rs:registration:export | 导出按钮 |
|
||
|
||
**注意**:menu_id 实际使用雪花ID
|
||
|
||
---
|
||
|
||
## 🚀 快速部署指南
|
||
|
||
### Step 1:查询父菜单ID
|
||
```sql
|
||
SELECT menu_id, menu_name
|
||
FROM sys_menu
|
||
WHERE menu_name LIKE '%出国%' OR menu_name LIKE '%人事%';
|
||
```
|
||
|
||
### Step 2:修改SQL脚本
|
||
打开 `出国登记审批菜单权限配置-快速版.sql`
|
||
|
||
修改第14行:
|
||
```sql
|
||
SET @parent_menu_id = 2000; -- 改为实际的父菜单ID
|
||
```
|
||
|
||
### Step 3:执行SQL脚本
|
||
在数据库工具中执行快速版SQL脚本
|
||
|
||
### Step 4:分配角色权限
|
||
1. 登录系统 → 【系统管理】→【角色管理】
|
||
2. 编辑需要审批权限的角色(如:人事管理员)
|
||
3. 勾选"出国登记审批"菜单及其4个按钮
|
||
4. 保存
|
||
|
||
### Step 5:验证测试
|
||
- ✅ 菜单是否显示
|
||
- ✅ 按钮是否显示
|
||
- ✅ 审批功能是否正常
|
||
|
||
---
|
||
|
||
## 🎯 前端权限控制
|
||
|
||
### Vue组件示例
|
||
```vue
|
||
<template>
|
||
<!-- 查看详情按钮 -->
|
||
<el-button
|
||
link
|
||
type="primary"
|
||
icon="View"
|
||
@click="handleView(scope.row)"
|
||
v-hasPermi="['rs:registration:query']">
|
||
</el-button>
|
||
|
||
<!-- 审批通过按钮 -->
|
||
<el-button
|
||
type="success"
|
||
icon="Check"
|
||
@click="handleApprove(scope.row)"
|
||
v-hasPermi="['rs:registration:approve']">
|
||
审批通过
|
||
</el-button>
|
||
|
||
<!-- 审批拒绝按钮 -->
|
||
<el-button
|
||
type="danger"
|
||
icon="Close"
|
||
@click="handleReject(scope.row)"
|
||
v-hasPermi="['rs:registration:approve']">
|
||
审批拒绝
|
||
</el-button>
|
||
|
||
<!-- 导出按钮 -->
|
||
<el-button
|
||
icon="Download"
|
||
@click="handleExport"
|
||
v-hasPermi="['rs:registration:export']">
|
||
导出
|
||
</el-button>
|
||
</template>
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ 后端权限控制
|
||
|
||
### Controller示例
|
||
```java
|
||
/**
|
||
* 查询出国登记审批列表
|
||
*/
|
||
@SaCheckPermission("rs:registration:query")
|
||
@GetMapping("/list")
|
||
public TableDataInfo<RsOverseasRegistrationVo> list(RsOverseasRegistrationBo bo, PageQuery pageQuery) {
|
||
return iRsOverseasRegistrationService.queryPageList(bo, pageQuery);
|
||
}
|
||
|
||
/**
|
||
* 审批通过
|
||
*/
|
||
@SaCheckPermission("rs:registration:approve")
|
||
@Log(title = "出国登记审批", businessType = BusinessType.UPDATE)
|
||
@PutMapping("/approve/{registrationId}")
|
||
public R<Void> approve(@PathVariable Long registrationId, @RequestBody Map<String, String> data) {
|
||
// 审批通过逻辑
|
||
return R.ok();
|
||
}
|
||
|
||
/**
|
||
* 审批拒绝
|
||
*/
|
||
@SaCheckPermission("rs:registration:approve")
|
||
@Log(title = "出国登记审批", businessType = BusinessType.UPDATE)
|
||
@PutMapping("/reject/{registrationId}")
|
||
public R<Void> reject(@PathVariable Long registrationId, @RequestBody Map<String, String> data) {
|
||
// 审批拒绝逻辑
|
||
return R.ok();
|
||
}
|
||
|
||
/**
|
||
* 导出
|
||
*/
|
||
@SaCheckPermission("rs:registration:export")
|
||
@Log(title = "出国登记审批", businessType = BusinessType.EXPORT)
|
||
@PostMapping("/export")
|
||
public void export(RsOverseasRegistrationBo bo, HttpServletResponse response) {
|
||
// 导出逻辑
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 常见问题排查
|
||
|
||
### 问题1:菜单不显示
|
||
**可能原因**:
|
||
- 菜单权限未分配给角色
|
||
- 菜单状态为停用或隐藏
|
||
|
||
**解决方法**:
|
||
```sql
|
||
-- 检查菜单配置
|
||
SELECT menu_id, menu_name, perms, visible, status
|
||
FROM sys_menu
|
||
WHERE menu_name = '出国登记审批';
|
||
|
||
-- 检查角色权限
|
||
SELECT r.role_name, m.menu_name, m.perms
|
||
FROM sys_role r
|
||
INNER JOIN sys_role_menu rm ON r.role_id = rm.role_id
|
||
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
|
||
WHERE m.menu_name = '出国登记审批';
|
||
```
|
||
|
||
### 问题2:按钮不显示
|
||
**可能原因**:
|
||
- 按钮权限未分配
|
||
- 前端权限标识不匹配
|
||
|
||
**解决方法**:
|
||
1. 检查角色是否勾选了按钮权限
|
||
2. 检查 `v-hasPermi` 权限标识是否正确
|
||
3. 清除浏览器缓存重新登录
|
||
|
||
### 问题3:接口403无权限
|
||
**可能原因**:
|
||
- 后端权限注解不匹配
|
||
- Token过期
|
||
|
||
**解决方法**:
|
||
1. 检查 `@SaCheckPermission` 权限标识
|
||
2. 重新登录获取新Token
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
### SQL配置脚本
|
||
- ✅ **出国登记审批菜单权限配置-快速版.sql** ⭐ 推荐
|
||
- ✅ **出国登记审批菜单权限配置.sql** - 详细版
|
||
|
||
### 说明文档
|
||
- ✅ **出国登记审批权限标识对照表.md** - 详细权限说明
|
||
- ✅ **出国登记审批权限配置总结.md** - 本文档
|
||
|
||
### 前端代码
|
||
- `web/src/views/rs/overseas-registration/approval.vue` - 审批页面
|
||
- `web/src/api/rs/overseas-registration.ts` - API接口
|
||
|
||
### 后端代码
|
||
- 待开发
|
||
|
||
---
|
||
|
||
## ✅ 配置检查清单
|
||
|
||
### SQL配置
|
||
- [ ] 查询父菜单ID
|
||
- [ ] 修改SQL脚本中的 `@parent_menu_id`
|
||
- [ ] 执行SQL脚本
|
||
- [ ] 检查sys_menu表(应有5条记录)
|
||
|
||
### 角色权限
|
||
- [ ] 分配菜单权限给角色
|
||
- [ ] 勾选所有按钮权限
|
||
- [ ] 保存配置
|
||
|
||
### 前端验证
|
||
- [ ] 菜单是否显示
|
||
- [ ] 4个按钮是否都显示
|
||
- [ ] 权限标识是否正确
|
||
|
||
### 后端验证
|
||
- [ ] Controller权限注解是否正确
|
||
- [ ] 接口是否正常调用
|
||
- [ ] 无权限时是否返回403
|
||
|
||
---
|
||
|
||
## 📝 版本记录
|
||
|
||
| 版本 | 日期 | 说明 | 维护人 |
|
||
|-----|------|------|--------|
|
||
| v1.0 | 2025-10-08 | 创建权限配置,采用二段式权限标识 | AI Assistant |
|
||
| v1.1 | 2025-10-08 | 删除批量审批按钮,保留4个基础按钮 | AI Assistant |
|
||
|
||
---
|
||
|
||
## 🎯 配置要点
|
||
|
||
1. ✅ **权限标识统一为二段式**:`rs:registration:操作`
|
||
2. ✅ **审批操作复用权限**:通过和拒绝都使用 `approve`
|
||
3. ✅ **菜单结构简洁**:1个菜单 + 4个按钮
|
||
4. ✅ **前后端权限一致**:确保权限标识完全匹配
|
||
5. ✅ **删除批量操作**:简化权限配置
|
||
|
||
---
|
||
|
||
**🎉 配置完成后,出国登记审批菜单即可正常使用!**
|
||
|