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); - } - /** * 新增角色菜单信息 *