refactor(system): 优化角色权限更新逻辑
- 在 RoleMenuRepository 中添加 findByRoleId 方法,用于查询指定角色的菜单权限 -优化 RoleServiceImpl 中的 updateRole 方法: - 使用 selectyRole替代新建 Role 实例 - 增加对空菜单 ID 的检查 - 通过对比现有权限,仅插入不存在的菜单权限 - 这些修改减少了不必要的数据库操作,提高了系统性能
This commit is contained in:
parent
eddc46e40d
commit
36e21c6cfe
@ -2,9 +2,16 @@ package com.zsc.edu.dify.modules.system.repo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zsc.edu.dify.modules.system.entity.RoleMenu;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Yao
|
||||
*/
|
||||
public interface RoleMenuRepository extends BaseMapper<RoleMenu> {
|
||||
|
||||
@Select("select * from sys_role_menu where role_id = #{id}")
|
||||
List<RoleMenu> findByRoleId(@Param("id") Long id);
|
||||
}
|
||||
|
@ -14,7 +14,9 @@ import com.zsc.edu.dify.modules.system.vo.RoleVo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -80,17 +82,27 @@ public class RoleServiceImpl extends ServiceImpl<RoleRepository, Role> implement
|
||||
count(new LambdaQueryWrapper<Role>().eq(Role::getName, dto.getName())) > 0) {
|
||||
throw new ConstraintException("name", dto.getName(), "同名角色已存在");
|
||||
}
|
||||
Role role = new Role();
|
||||
role.setName(dto.getName());
|
||||
role.setRemark(dto.getRemark());
|
||||
updateById(role);
|
||||
if (dto.getMenuIds() != null) {
|
||||
roleMenuRepository.delete(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, id));
|
||||
roleMenuRepository.insert(
|
||||
dto.getMenuIds().stream()
|
||||
.map(menuId -> new RoleMenu(id, menuId)).collect(Collectors.toList()));
|
||||
selectyRole.setName(dto.getName());
|
||||
selectyRole.setRemark(dto.getRemark());
|
||||
updateById(selectyRole);
|
||||
if (dto.getMenuIds() != null && !dto.getMenuIds().isEmpty()) {
|
||||
// 查询当前角色已有的菜单权限
|
||||
List<RoleMenu> existingRoleMenus = roleMenuRepository.findByRoleId(id);
|
||||
Set<Long> existingMenuIds = existingRoleMenus.stream()
|
||||
.map(RoleMenu::getMenuId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 筛选出不存在的菜单ID组合进行插入
|
||||
List<RoleMenu> roleMenusToInsert = dto.getMenuIds().stream()
|
||||
.filter(menuId -> !existingMenuIds.contains(menuId))
|
||||
.map(menuId -> new RoleMenu(id, menuId))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!roleMenusToInsert.isEmpty()) {
|
||||
roleMenuRepository.insert(roleMenusToInsert);
|
||||
}
|
||||
}
|
||||
return role;
|
||||
return selectyRole;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user