update 角色管理菜单权限-数据权限放到一起

This commit is contained in:
lau
2026-04-15 20:39:51 +08:00
parent 1c147c20ef
commit 5057e905f4
3 changed files with 43 additions and 41 deletions

View File

@@ -104,7 +104,7 @@ public class SysRoleController extends BaseController {
} }
/** /**
* 修改角色。 * 修改角色基础信息(不包含菜单权限、数据权限)
* *
* @param role 角色参数 * @param role 角色参数
* @return 操作结果 * @return 操作结果
@@ -112,8 +112,8 @@ public class SysRoleController extends BaseController {
@SaCheckPermission("system:role:edit") @SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE) @Log(title = "角色管理", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PutMapping @PutMapping("/baseInfo")
public R<Void> edit(@Validated @RequestBody SysRoleBo role) { public R<Void> editBaseInfo(@Validated @RequestBody SysRoleBo role) {
roleService.checkRoleAllowed(role); roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId()); roleService.checkRoleDataScope(role.getRoleId());
if (!roleService.checkRoleNameUnique(role)) { if (!roleService.checkRoleNameUnique(role)) {
@@ -122,7 +122,7 @@ public class SysRoleController extends BaseController {
return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
} }
if (roleService.updateRole(role) > 0) { if (roleService.updateRoleBaseInfo(role) > 0) {
roleService.cleanOnlineUserByRole(role.getRoleId()); roleService.cleanOnlineUserByRole(role.getRoleId());
return R.ok(); return R.ok();
} }
@@ -130,7 +130,7 @@ public class SysRoleController extends BaseController {
} }
/** /**
* 修改角色数据权限。 * 修改角色权限信息(菜单权限 + 数据权限
* *
* @param role 角色参数 * @param role 角色参数
* @return 操作结果 * @return 操作结果
@@ -138,15 +138,15 @@ public class SysRoleController extends BaseController {
@SaCheckPermission("system:role:edit") @SaCheckPermission("system:role:edit")
@Log(title = "角色管理", businessType = BusinessType.UPDATE) @Log(title = "角色管理", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PutMapping("/dataScope") @PutMapping("/permission")
public R<Void> dataScope(@RequestBody SysRoleBo role) { public R<Void> editPermission(@RequestBody SysRoleBo role) {
roleService.checkRoleAllowed(role); roleService.checkRoleAllowed(role);
roleService.checkRoleDataScope(role.getRoleId()); roleService.checkRoleDataScope(role.getRoleId());
if (roleService.authDataScope(role) > 0) { if (roleService.updateRolePermission(role) > 0) {
roleService.cleanOnlineUserByRole(role.getRoleId()); roleService.cleanOnlineUserByRole(role.getRoleId());
return R.ok(); return R.ok();
} }
return R.fail("修改角色'" + role.getRoleName() + "'数据权限失败,请联系管理员"); return R.fail("修改角色'" + role.getRoleName() + "'权限失败,请联系管理员");
} }
/** /**

View File

@@ -143,12 +143,20 @@ public interface ISysRoleService {
int insertRole(SysRoleBo bo); int insertRole(SysRoleBo bo);
/** /**
* 修改保存角色信息 * 修改角色基础信息(不包含菜单/数据权限)。
* *
* @param bo 角色信息 * @param bo 角色信息
* @return 影响行数 * @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); int updateRoleStatus(Long roleId, String status);
/**
* 修改数据权限信息
*
* @param bo 角色信息
* @return 影响行数
*/
int authDataScope(SysRoleBo bo);
/** /**
* 通过角色ID删除角色 * 通过角色ID删除角色

View File

@@ -306,24 +306,42 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
} }
/** /**
* 修改保存角色信息 * 修改角色基础信息(不更新菜单与数据权限)。
* *
* @param bo 角色信息 * @param bo 角色信息
* @return 结果 * @return 结果
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updateRole(SysRoleBo bo) { public int updateRoleBaseInfo(SysRoleBo bo) {
SysRole role = MapstructUtils.convert(bo, SysRole.class); SysRole role = MapstructUtils.convert(bo, SysRole.class);
if (SystemConstants.DISABLE.equals(role.getStatus()) && this.countUserRoleByRoleId(role.getRoleId()) > 0) { if (SystemConstants.DISABLE.equals(role.getStatus()) && this.countUserRoleByRoleId(role.getRoleId()) > 0) {
throw new ServiceException("角色已分配,不能禁用!"); 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); baseMapper.updateById(role);
// 删除角色与菜单关联 // 先清理旧菜单权限,再重建。
roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, role.getRoleId())); roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, role.getRoleId()));
return insertRoleMenu(bo); insertRoleMenu(bo);
// 先清理旧数据权限,再按当前配置重建。
roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().eq(SysRoleDept::getRoleId, role.getRoleId()));
return insertRoleDept(bo);
} }
/** /**
@@ -344,24 +362,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
.eq(SysRole::getRoleId, roleId)); .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<SysRoleDept>().eq(SysRoleDept::getRoleId, role.getRoleId()));
// 新增角色和部门信息(数据权限)
return insertRoleDept(bo);
}
/** /**
* 新增角色菜单信息 * 新增角色菜单信息