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.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.zsc.edu.dify.modules.system.entity.RoleMenu;
|
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
|
* @author Yao
|
||||||
*/
|
*/
|
||||||
public interface RoleMenuRepository extends BaseMapper<RoleMenu> {
|
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 lombok.AllArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
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) {
|
count(new LambdaQueryWrapper<Role>().eq(Role::getName, dto.getName())) > 0) {
|
||||||
throw new ConstraintException("name", dto.getName(), "同名角色已存在");
|
throw new ConstraintException("name", dto.getName(), "同名角色已存在");
|
||||||
}
|
}
|
||||||
Role role = new Role();
|
selectyRole.setName(dto.getName());
|
||||||
role.setName(dto.getName());
|
selectyRole.setRemark(dto.getRemark());
|
||||||
role.setRemark(dto.getRemark());
|
updateById(selectyRole);
|
||||||
updateById(role);
|
if (dto.getMenuIds() != null && !dto.getMenuIds().isEmpty()) {
|
||||||
if (dto.getMenuIds() != null) {
|
// 查询当前角色已有的菜单权限
|
||||||
roleMenuRepository.delete(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, id));
|
List<RoleMenu> existingRoleMenus = roleMenuRepository.findByRoleId(id);
|
||||||
roleMenuRepository.insert(
|
Set<Long> existingMenuIds = existingRoleMenus.stream()
|
||||||
dto.getMenuIds().stream()
|
.map(RoleMenu::getMenuId)
|
||||||
.map(menuId -> new RoleMenu(id, menuId)).collect(Collectors.toList()));
|
.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