7.9 KiB
7.9 KiB
出国登记审批权限配置总结
📋 配置概览
菜单名称: 出国登记审批
权限标识规范: 二段式(模块:操作)
按钮数量: 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
原因:
- 业务逻辑统一:有审批权限的人,自然可以通过或拒绝
- 简化权限管理:不需要为每个操作单独配置
- 降低配置复杂度
✅ 删除批量操作
已删除:
批量审批通过批量审批拒绝
原因:
- 简化权限配置
- 保持菜单简洁
- 后续如需批量操作,可在业务层实现
📊 菜单结构
📁 人事管理 / 出国管理
📄 出国登记审批 (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
SELECT menu_id, menu_name
FROM sys_menu
WHERE menu_name LIKE '%出国%' OR menu_name LIKE '%人事%';
Step 2:修改SQL脚本
打开 出国登记审批菜单权限配置-快速版.sql
修改第14行:
SET @parent_menu_id = 2000; -- 改为实际的父菜单ID
Step 3:执行SQL脚本
在数据库工具中执行快速版SQL脚本
Step 4:分配角色权限
- 登录系统 → 【系统管理】→【角色管理】
- 编辑需要审批权限的角色(如:人事管理员)
- 勾选"出国登记审批"菜单及其4个按钮
- 保存
Step 5:验证测试
- ✅ 菜单是否显示
- ✅ 按钮是否显示
- ✅ 审批功能是否正常
🎯 前端权限控制
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示例
/**
* 查询出国登记审批列表
*/
@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:菜单不显示
可能原因:
- 菜单权限未分配给角色
- 菜单状态为停用或隐藏
解决方法:
-- 检查菜单配置
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:按钮不显示
可能原因:
- 按钮权限未分配
- 前端权限标识不匹配
解决方法:
- 检查角色是否勾选了按钮权限
- 检查
v-hasPermi权限标识是否正确 - 清除浏览器缓存重新登录
问题3:接口403无权限
可能原因:
- 后端权限注解不匹配
- Token过期
解决方法:
- 检查
@SaCheckPermission权限标识 - 重新登录获取新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 |
🎯 配置要点
- ✅ 权限标识统一为二段式:
rs:registration:操作 - ✅ 审批操作复用权限:通过和拒绝都使用
approve - ✅ 菜单结构简洁:1个菜单 + 4个按钮
- ✅ 前后端权限一致:确保权限标识完全匹配
- ✅ 删除批量操作:简化权限配置
🎉 配置完成后,出国登记审批菜单即可正常使用!