Files
hzdyjs/出国登记审批权限配置总结.md
T
2025-10-14 16:41:19 +08:00

7.9 KiB
Raw Blame History

出国登记审批权限配置总结

📋 配置概览

菜单名称: 出国登记审批
权限标识规范: 二段式(模块:操作)
按钮数量: 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

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:分配角色权限

  1. 登录系统 → 【系统管理】→【角色管理】
  2. 编辑需要审批权限的角色(如:人事管理员)
  3. 勾选"出国登记审批"菜单及其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:按钮不显示

可能原因:

  • 按钮权限未分配
  • 前端权限标识不匹配

解决方法:

  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. ✅ 删除批量操作:简化权限配置

🎉 配置完成后,出国登记审批菜单即可正常使用!