From 0e74ce0bfd17106b0cf29743c5ac3160531dea23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 16 Apr 2026 14:38:48 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=94=BE=E5=88=B0=E4=B8=80=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysRoleController.java | 20 +++++--- .../system/service/ISysRoleService.java | 22 ++++----- .../service/impl/SysRoleServiceImpl.java | 47 +++++++++---------- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java index 7e10b06e0..537943272 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java @@ -92,7 +92,10 @@ public class SysRoleController extends BaseController { } /** - * 修改保存角色 + * 修改角色基础信息(不包含菜单权限、数据权限)。 + * + * @param role 角色参数 + * @return 操作结果 */ @SaCheckPermission("system:role:edit") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @@ -107,7 +110,7 @@ public class SysRoleController extends BaseController { return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); } - if (roleService.updateRole(role) > 0) { + if (roleService.updateRoleBaseInfo(role) > 0) { roleService.cleanOnlineUserByRole(role.getRoleId()); return R.ok(); } @@ -115,20 +118,23 @@ public class SysRoleController extends BaseController { } /** - * 修改保存数据权限 + * 修改角色权限信息(菜单权限 + 数据权限)。 + * + * @param role 角色参数 + * @return 操作结果 */ @SaCheckPermission("system:role:edit") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping("/dataScope") - public R dataScope(@RequestBody SysRoleBo role) { + @PutMapping("/permission") + public R editPermission(@RequestBody SysRoleBo role) { roleService.checkRoleAllowed(role); roleService.checkRoleDataScope(role.getRoleId()); - if (roleService.authDataScope(role) > 0) { + if (roleService.updateRolePermission(role) > 0) { roleService.cleanOnlineUserByRole(role.getRoleId()); return R.ok(); } - return R.fail("修改角色'" + role.getRoleName() + "'数据权限失败,请联系管理员"); + return R.fail("修改角色'" + role.getRoleName() + "'权限失败,请联系管理员"); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java index ac0aaeae9..6b5a092a3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java @@ -142,12 +142,20 @@ public interface ISysRoleService { int insertRole(SysRoleBo bo); /** - * 修改保存角色信息 + * 修改角色基础信息(不包含菜单/数据权限)。 * * @param bo 角色信息 - * @return 结果 + * @return 影响行数 */ - int updateRole(SysRoleBo bo); + int updateRoleBaseInfo(SysRoleBo bo); + + /** + * 修改角色权限信息(菜单权限 + 数据权限)。 + * + * @param bo 角色权限参数 + * @return 影响行数 + */ + int updateRolePermission(SysRoleBo bo); /** * 修改角色状态 @@ -158,14 +166,6 @@ public interface ISysRoleService { */ int updateRoleStatus(Long roleId, String status); - /** - * 修改数据权限信息 - * - * @param bo 角色信息 - * @return 结果 - */ - int authDataScope(SysRoleBo bo); - /** * 通过角色ID删除角色 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index 5e57a2667..52aa30688 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -299,24 +299,42 @@ public class SysRoleServiceImpl implements ISysRoleService { } /** - * 修改保存角色信息 + * 修改角色基础信息(不更新菜单与数据权限)。 * * @param bo 角色信息 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) - public int updateRole(SysRoleBo bo) { + public int updateRoleBaseInfo(SysRoleBo bo) { SysRole role = MapstructUtils.convert(bo, SysRole.class); if (SystemConstants.DISABLE.equals(role.getStatus()) && this.countUserRoleByRoleId(role.getRoleId()) > 0) { throw new ServiceException("角色已分配,不能禁用!"); } - // 修改角色信息 + // 仅更新角色基础字段,避免影响权限分配。 + return baseMapper.updateById(role); + } + + /** + * 修改角色权限信息(菜单权限 + 数据权限)。 + * + * @param bo 角色权限参数 + * @return 结果 + */ + @CacheEvict(cacheNames = CacheNames.SYS_ROLE_CUSTOM, key = "#bo.roleId") + @Override + @Transactional(rollbackFor = Exception.class) + public int updateRolePermission(SysRoleBo bo) { + SysRole role = MapstructUtils.convert(bo, SysRole.class); + // 更新权限相关配置字段(数据范围、树联动)。 baseMapper.updateById(role); - // 删除角色与菜单关联 + // 先清理旧菜单权限,再重建。 roleMenuMapper.delete(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, role.getRoleId())); - return insertRoleMenu(bo); + insertRoleMenu(bo); + // 先清理旧数据权限,再按当前配置重建。 + roleDeptMapper.delete(new LambdaQueryWrapper().eq(SysRoleDept::getRoleId, role.getRoleId())); + return insertRoleDept(bo); } /** @@ -337,25 +355,6 @@ public class SysRoleServiceImpl implements ISysRoleService { .eq(SysRole::getRoleId, roleId)); } - /** - * 修改数据权限信息 - * - * @param bo 角色信息 - * @return 结果 - */ - @CacheEvict(cacheNames = CacheNames.SYS_ROLE_CUSTOM, key = "#bo.roleId") - @Override - @Transactional(rollbackFor = Exception.class) - public int authDataScope(SysRoleBo bo) { - SysRole role = MapstructUtils.convert(bo, SysRole.class); - // 修改角色信息 - baseMapper.updateById(role); - // 删除角色与部门关联 - roleDeptMapper.delete(new LambdaQueryWrapper().eq(SysRoleDept::getRoleId, role.getRoleId())); - // 新增角色和部门信息(数据权限) - return insertRoleDept(bo); - } - /** * 新增角色菜单信息 *