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 19f4ce255..7cd8cc70a 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 @@ -104,7 +104,7 @@ public class SysRoleController extends BaseController { } /** - * 修改角色。 + * 修改角色基础信息(不包含菜单权限、数据权限)。 * * @param role 角色参数 * @return 操作结果 @@ -112,8 +112,8 @@ public class SysRoleController extends BaseController { @SaCheckPermission("system:role:edit") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping - public R edit(@Validated @RequestBody SysRoleBo role) { + @PutMapping("/baseInfo") + public R editBaseInfo(@Validated @RequestBody SysRoleBo role) { roleService.checkRoleAllowed(role); roleService.checkRoleDataScope(role.getRoleId()); if (!roleService.checkRoleNameUnique(role)) { @@ -122,7 +122,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(); } @@ -130,7 +130,7 @@ public class SysRoleController extends BaseController { } /** - * 修改角色数据权限。 + * 修改角色权限信息(菜单权限 + 数据权限)。 * * @param role 角色参数 * @return 操作结果 @@ -138,15 +138,15 @@ public class SysRoleController extends BaseController { @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 c8304ce44..207fd06de 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 @@ -143,12 +143,20 @@ public interface ISysRoleService { int insertRole(SysRoleBo bo); /** - * 修改保存角色信息 + * 修改角色基础信息(不包含菜单/数据权限)。 * * @param bo 角色信息 * @return 影响行数 */ - int updateRole(SysRoleBo bo); + int updateRoleBaseInfo(SysRoleBo bo); + + /** + * 修改角色权限信息(菜单权限 + 数据权限)。 + * + * @param bo 角色权限参数 + * @return 影响行数 + */ + int updateRolePermission(SysRoleBo bo); /** * 修改角色状态 @@ -159,13 +167,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 2e10879fb..1e8954b21 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 @@ -306,24 +306,42 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { } /** - * 修改保存角色信息 + * 修改角色基础信息(不更新菜单与数据权限)。 * * @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); } /** @@ -344,24 +362,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { .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); - } + /** * 新增角色菜单信息