Browse Source

修改权限,改为【全部 拒绝 只读】

ppt-20260120
review512jwy@163.com 2 weeks ago
parent
commit
5a8f290586
  1. 7
      document/db/20260327.sql
  2. 46
      dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/RoleController.java
  3. 6
      dongjian-dashboard-back-controller/src/test/java/com/dongjian/dashboard/back/controller/AdminRoleControllerTest.java
  4. 16
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicRoleMenuRelationMapperExt.java
  5. 60
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicRoleMenuRelationMapperExt.xml
  6. 6
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/role/OptRoleParam.java
  7. 10
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/role/RoleMenuPermissionDTO.java
  8. 32
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/DashboardTreeMenusDTO.java
  9. 13
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/MenuEntity.java
  10. 14
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/MenuTreeVO.java
  11. 13
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/RoleMenuPermissionEntity.java
  12. 11
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/RoleService.java
  13. 70
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/DashboardMenuTree.java
  14. 186
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/RoleServiceImpl.java

7
document/db/20260327.sql

@ -0,0 +1,7 @@
CREATE TABLE basic_role_menu_relation_dashboard (
role_id BIGINT,
menu_id BIGINT,
permission_type INT COMMENT '0-拒绝 1-只读 2-全部',
creator_id BIGINT,
create_time BIGINT
);

46
dongjian-dashboard-back-controller/src/main/java/com/dongjian/dashboard/back/controller/RoleController.java

@ -11,10 +11,15 @@ import com.dongjian.dashboard.back.configurator.interceptor.AccessRequired;
import com.dongjian.dashboard.back.dto.role.DeleteRoleParam;
import com.dongjian.dashboard.back.dto.role.OptRoleParam;
import com.dongjian.dashboard.back.dto.role.PageSearchParam;
import com.dongjian.dashboard.back.dto.role.RoleMenuPermissionDTO;
import com.dongjian.dashboard.back.vo.TreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.DashboardTreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.MenuTreeVO;
import com.dongjian.dashboard.back.vo.role.RoleMenuPermissionEntity;
import com.dongjian.dashboard.back.vo.role.RolePageDTO;
import com.dongjian.dashboard.back.service.RoleService;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@ -110,7 +115,8 @@ public class RoleController {
}
return pageResponse;
}
@Hidden
@Operation(summary = "获取当前登录用户拥有的权限菜单树")
@RequestMapping(value = "/getOwnMenuIds",method = RequestMethod.GET)
public SimpleDataResponse<List<TreeMenusDTO>> getOwnMenuIds(
@ -121,7 +127,8 @@ public class RoleController {
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getOwnMenuIds(CompanyId, UserId, LanguageType);
}
@Hidden
@Operation(summary = "获取对应角色拥有的权限菜单ID")
@RequestMapping(value = "/getMenuIdsByRoleId",method = RequestMethod.GET)
public SimpleDataResponse<String> getMenuIdsByRoleId(
@ -133,5 +140,40 @@ public class RoleController {
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getMenuIdsByRoleId(roleId, CompanyId, UserId, LanguageType);
}
/**
* 获取菜单树 + 权限
*/
@GetMapping("/getOwnMenuTree")
public SimpleDataResponse<List<DashboardTreeMenusDTO>> getTree(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getOwnMenuTree(CompanyId, UserId, LanguageType);
}
@Operation(summary = "获取对应角色拥有的权限菜单ID")
@RequestMapping(value = "/getMenuIdListByRoleId",method = RequestMethod.GET)
public SimpleDataResponse<List<RoleMenuPermissionEntity>> getMenuIdListByRoleId(
@Parameter(name="roleId",description="角色ID",required=true, schema = @Schema(defaultValue = "28")) @RequestParam Long roleId,
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required=true) String AccessToken,
@Parameter(name = "UserId", description = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long CompanyId,
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getMenuIdListByRoleId(roleId, CompanyId, UserId, LanguageType);
}
/**
* 保存权限
*/
@Hidden
@PostMapping("/save")
public void save(@RequestParam Long roleId,
@RequestBody List<RoleMenuPermissionDTO> list) {
roleService.saveRolePermission(roleId, list);
}
}

6
dongjian-dashboard-back-controller/src/test/java/com/dongjian/dashboard/back/controller/AdminRoleControllerTest.java

@ -30,6 +30,8 @@ import org.springframework.web.context.WebApplicationContext;
import jakarta.annotation.Resource;
import java.util.ArrayList;
@RunWith(SpringRunner.class)
@SpringBootTest
@ -134,7 +136,7 @@ public class AdminRoleControllerTest {
OptRoleParam param = new OptRoleParam();
param.setRoleName(ROLE_NAME);
param.setDescription("Description");
param.setMenuIds("1,2");
param.setMenuIds(new ArrayList<>());
return param;
}
@ -204,7 +206,7 @@ public class AdminRoleControllerTest {
param.setRoleId(getMockDataId());
param.setRoleName(ROLE_NAME);
param.setDescription("Description-edit");
param.setMenuIds("1,2,3");
param.setMenuIds(new ArrayList<>());
String content = (new ObjectMapper()).writeValueAsString(param);
System.out.println("testEdit params:"+content);

16
dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicRoleMenuRelationMapperExt.java

@ -1,10 +1,14 @@
package com.dongjian.dashboard.back.dao.ex;
import java.util.List;
import java.util.Map;
import com.dongjian.dashboard.back.vo.role.DashboardTreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.RoleMenuPermissionEntity;
import org.apache.ibatis.annotations.Mapper;
import com.dongjian.dashboard.back.dao.auto.BasicRoleMenuRelationMapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface BasicRoleMenuRelationMapperExt extends BasicRoleMenuRelationMapper {
@ -14,4 +18,16 @@ public interface BasicRoleMenuRelationMapperExt extends BasicRoleMenuRelationMap
String getMenuIdsByRoleId(Long roleId);
void deleteDashboardRelation(Map<String, Object> deleteMap);
List<DashboardTreeMenusDTO> selectAllMenu(Map<String, Object> allMenusParamMap);
List<RoleMenuPermissionEntity> selectByRoleId(@Param("roleId") Long roleId);
int deleteByRoleId(@Param("roleId") Long roleId);
int dashboardBatchInsert(@Param("list") List<RoleMenuPermissionEntity> list);
Long getRoleIdByUserId(@Param("userId") Long userId);
List<RoleMenuPermissionEntity> getMenuIdListByRoleId(Long roleId);
}

60
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicRoleMenuRelationMapperExt.xml

@ -30,5 +30,65 @@
r.role_id = #{roleId} AND m.used_by_dashboard = 1
</delete>
<select id="selectAllMenu" resultType="com.dongjian.dashboard.back.vo.role.DashboardTreeMenusDTO">
SELECT
bmenu.`id` AS `menuId`,
bmenu.parent_menu_id AS parentMenuId,
bmenu.menu_name AS title,
bmenu.dashboard_lowest_node AS dashboardLowestNode
FROM
basic_menu bmenu
<if test="superRole != null and superRole == 0">
inner join basic_role_menu_relation_dashboard brmrd on bmenu.id = brmrd.menu_id and brmrd.role_id = #{roleId}
</if>
WHERE
bmenu.flag = 0 AND bmenu.used_by_dashboard = 1
</select>
<select id="selectByRoleId" resultType="com.dongjian.dashboard.back.vo.role.RoleMenuPermissionEntity">
SELECT
role_id,
menu_id,
permission_type,
create_time
FROM basic_role_menu_relation_dashboard
WHERE role_id = #{roleId}
</select>
<delete id="deleteByRoleId">
DELETE FROM basic_role_menu_relation_dashboard
WHERE role_id = #{roleId}
</delete>
<insert id="dashboardBatchInsert">
INSERT INTO basic_role_menu_relation_dashboard (role_id, menu_id, permission_type, create_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.roleId},
#{item.menuId},
#{item.permissionType},
#{item.createTime})
</foreach>
</insert>
<select id="getRoleIdByUserId" resultType="long">
SELECT role_id
FROM basic_role_user_relation
WHERE user_id = #{userId}
LIMIT 1
</select>
<select id="getMenuIdListByRoleId" resultType="com.dongjian.dashboard.back.vo.role.RoleMenuPermissionEntity">
SELECT
brmrd.role_id,
brmrd.menu_id,
brmrd.permission_type,
brmrd.create_time
FROM
basic_role_menu_relation_dashboard brmrd
INNER JOIN basic_menu bmenu ON bmenu.id = brmrd.menu_id
WHERE
bmenu.flag != 1 AND brmrd.role_id = #{roleId} AND bmenu.used_by_dashboard = 1
</select>
</mapper>

6
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/role/OptRoleParam.java

@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author zhc
* @time 2022年6月14日10:56:38
@ -22,8 +24,8 @@ public class OptRoleParam {
@Schema(description = "描述",example = "这是管理员描述", required = true)
private String description;
@Schema(description = "菜单权限ID,使用逗号连接",example = "1,4,5,6", required = true)
private String menuIds;
@Schema(description = "菜单权限ID,使用逗号连接",example = "[]", required = true)
private List<RoleMenuPermissionDTO> menuIds;
@Schema(description = "所属企业ID",example = "2", hidden = true)
private Long companyId;

10
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/dto/role/RoleMenuPermissionDTO.java

@ -0,0 +1,10 @@
package com.dongjian.dashboard.back.dto.role;
import lombok.Data;
@Data
public class RoleMenuPermissionDTO {
private Long menuId;
private Integer permissionType;
}

32
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/DashboardTreeMenusDTO.java

@ -0,0 +1,32 @@
package com.dongjian.dashboard.back.vo.role;
import com.dongjian.dashboard.back.vo.TreeMenusDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* @author Mr.Jiang
* @time 2022年7月29日 下午4:37:50
*/
@Data
public class DashboardTreeMenusDTO {
@Schema(description = "节点ID",example = "11", required = true)
private Long menuId;
@Schema(description = "父节点ID",example = "2", hidden = true)
private Long parentMenuId;
@Schema(description = "节点名称",example = "添加", required = true)
private String title;
@Schema(description = "子节点",example = "[]", required = false)
private List<DashboardTreeMenusDTO> children;
private Integer permissionType; // 0-拒绝 1-只读 2-全部 null=半选
private Integer dashboardLowestNode; // 0-否 1-是
}

13
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/MenuEntity.java

@ -0,0 +1,13 @@
package com.dongjian.dashboard.back.vo.role;
import lombok.Data;
@Data
public class MenuEntity {
private Long id;
private Long parentMenuId;
private String menuName;
private Integer menuLevel;
private Integer flag;
}

14
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/MenuTreeVO.java

@ -0,0 +1,14 @@
package com.dongjian.dashboard.back.vo.role;
import lombok.Data;
import java.util.List;
@Data
public class MenuTreeVO {
private Long id;
private String name;
private Integer permissionType;
private List<MenuTreeVO> children;
}

13
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/role/RoleMenuPermissionEntity.java

@ -0,0 +1,13 @@
package com.dongjian.dashboard.back.vo.role;
import lombok.Data;
@Data
public class RoleMenuPermissionEntity {
private Long roleId;
private Long menuId;
private Integer permissionType;
private Long createTime;
}

11
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/RoleService.java

@ -6,7 +6,11 @@ import com.dongjian.dashboard.back.common.response.PageInfo;
import com.dongjian.dashboard.back.common.response.SimpleDataResponse;
import com.dongjian.dashboard.back.dto.role.DeleteRoleParam;
import com.dongjian.dashboard.back.dto.role.OptRoleParam;
import com.dongjian.dashboard.back.dto.role.RoleMenuPermissionDTO;
import com.dongjian.dashboard.back.vo.TreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.DashboardTreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.MenuTreeVO;
import com.dongjian.dashboard.back.vo.role.RoleMenuPermissionEntity;
import com.dongjian.dashboard.back.vo.role.RolePageDTO;
/**
@ -26,6 +30,11 @@ public interface RoleService {
PageInfo<RolePageDTO> getListPage(com.dongjian.dashboard.back.dto.role.PageSearchParam pageSearchParam,
Long companyId, Long userId, Integer languageType);
SimpleDataResponse<List<DashboardTreeMenusDTO>> getOwnMenuTree(Long companyId, Long userId, Integer languageType);
void saveRolePermission(Long roleId, List<RoleMenuPermissionDTO> list);
SimpleDataResponse<List<RoleMenuPermissionEntity>> getMenuIdListByRoleId(Long roleId, Long companyId, Long userId, Integer languageType);
}

70
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/DashboardMenuTree.java

@ -0,0 +1,70 @@
package com.dongjian.dashboard.back.service.common;
import com.dongjian.dashboard.back.vo.role.DashboardTreeMenusDTO;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class DashboardMenuTree {
private List<DashboardTreeMenusDTO> menuList = new ArrayList<>();
public DashboardMenuTree(List<DashboardTreeMenusDTO> menuList) {
this.menuList = menuList;
}
/**
* 构建树
*/
public List<DashboardTreeMenusDTO> buildTree(String rootNodeKey) {
List<DashboardTreeMenusDTO> treeMenus = new ArrayList<>();
for (DashboardTreeMenusDTO node : getRootNode(rootNodeKey)) {
treeMenus.add(buildChildTree(node));
}
return treeMenus;
}
/**
* 构建子树核心修改点
*/
private DashboardTreeMenusDTO buildChildTree(DashboardTreeMenusDTO parent) {
// 如果是最小节点 → 直接终止
if (parent.getDashboardLowestNode() != null
&& parent.getDashboardLowestNode() == 1) {
parent.setChildren(new ArrayList<>());
return parent;
}
List<DashboardTreeMenusDTO> children = new ArrayList<>();
for (DashboardTreeMenusDTO node : menuList) {
if (node.getParentMenuId().equals(parent.getMenuId())) {
children.add(buildChildTree(node));
}
}
parent.setChildren(children);
return parent;
}
/**
* 获取根节点
*/
private List<DashboardTreeMenusDTO> getRootNode(String rootNodeKey) {
List<DashboardTreeMenusDTO> roots = new ArrayList<>();
for (DashboardTreeMenusDTO node : menuList) {
if (Objects.equals(String.valueOf(node.getParentMenuId()), rootNodeKey)) {
roots.add(node);
}
}
return roots;
}
}

186
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/RoleServiceImpl.java

@ -1,5 +1,8 @@
package com.dongjian.dashboard.back.service.impl;
import com.dongjian.dashboard.back.dto.role.RoleMenuPermissionDTO;
import com.dongjian.dashboard.back.service.common.DashboardMenuTree;
import com.dongjian.dashboard.back.vo.role.*;
import com.github.pagehelper.PageHelper;
import com.dongjian.dashboard.back.common.exception.MsgCodeException;
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange;
@ -19,7 +22,6 @@ import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.service.common.MenuTree;
import com.dongjian.dashboard.back.util.CommonUtil;
import com.dongjian.dashboard.back.vo.TreeMenusDTO;
import com.dongjian.dashboard.back.vo.role.RolePageDTO;
import java.util.*;
import java.util.stream.Collectors;
@ -94,26 +96,23 @@ public class RoleServiceImpl implements RoleService {
private void insertRoleMenuRelation(Long companyId, Long userId, long currentUnix, Long roleId, String menuIds) {
if (StringUtils.isNoneBlank(menuIds)) {
//把无效的id去掉
menuIds = filterMenuIds(companyId, userId, menuIds);
if (StringUtils.isBlank(menuIds)) {
return;
}
//先删除原有的角色ID
Map<String, Object> deleteMap = new HashMap<>();
deleteMap.put("roleId", roleId);
basicRoleMenuRelationMapperExt.deleteDashboardRelation(deleteMap);
//重新插入关联关系
List<Long> idList = Arrays.asList(menuIds.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("roleId", roleId);
paramMap.put("menuIds", idList);
paramMap.put("creatorId", userId);
paramMap.put("createTime", currentUnix);
basicRoleMenuRelationMapperExt.batchInsert(paramMap);
private void insertRoleMenuRelation(Long companyId, Long userId, long currentUnix, Long roleId, List<RoleMenuPermissionDTO> menuIds) {
basicRoleMenuRelationMapperExt.deleteByRoleId(roleId);
if (menuIds == null || menuIds.isEmpty()) {
return;
}
List<RoleMenuPermissionEntity> entities = menuIds.stream().map(item -> {
RoleMenuPermissionEntity entity = new RoleMenuPermissionEntity();
entity.setRoleId(roleId);
entity.setMenuId(item.getMenuId());
entity.setPermissionType(item.getPermissionType());
entity.setCreateTime(currentUnix);
return entity;
}).collect(Collectors.toList());
basicRoleMenuRelationMapperExt.dashboardBatchInsert(entities);
}
@ -143,7 +142,7 @@ public class RoleServiceImpl implements RoleService {
if(StringUtils.isBlank(param.getRoleName()) || param.getRoleName().length() > 100){
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "Parameter [roleName] error");
}
if(StringUtils.isBlank(param.getMenuIds())){
if(CollectionUtils.isEmpty(param.getMenuIds())){
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "menuIds can not be null");
}
return SimpleDataResponse.success();
@ -315,4 +314,149 @@ public class RoleServiceImpl implements RoleService {
return new PageInfo<>(resultList);
}
@Override
public SimpleDataResponse<List<DashboardTreeMenusDTO>> getOwnMenuTree(Long companyId, Long userId, Integer languageType) {
// 1查询用户信息
BasicUser basicUser = basicUserMapperExt.selectByPrimaryKey(userId);
int superRole = basicUser.getSuperRole() == null ? 0 : basicUser.getSuperRole();
// 获取角色权限(非超级管理员)
Map<Long, Integer> permissionMap = new HashMap<>();
if (superRole != 1) {
Long roleId = basicRoleMenuRelationMapperExt.getRoleIdByUserId(userId);
List<RoleMenuPermissionEntity> permissions = basicRoleMenuRelationMapperExt.selectByRoleId(roleId);
permissionMap = permissions.stream()
.collect(Collectors.toMap(
RoleMenuPermissionEntity::getMenuId,
RoleMenuPermissionEntity::getPermissionType
));
}
// 查询全量菜单
List<DashboardTreeMenusDTO> allMenus = basicRoleMenuRelationMapperExt.selectAllMenu(Collections.emptyMap());
Map<Long, DashboardTreeMenusDTO> fullMenuMap = allMenus.stream()
.collect(Collectors.toMap(DashboardTreeMenusDTO::getMenuId, m -> m));
// 获取用户可见菜单(叶子或有权限的节点)
List<DashboardTreeMenusDTO> visibleMenus;
if (superRole == 1) {
// 超级管理员可见所有
visibleMenus = new ArrayList<>(allMenus);
} else {
Long roleId = basicRoleMenuRelationMapperExt.getRoleIdByUserId(userId);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("superRole", superRole);
paramMap.put("roleId", roleId);
visibleMenus = basicRoleMenuRelationMapperExt.selectAllMenu(paramMap);
}
// 补全父节点
visibleMenus = fillMissingParents(visibleMenus, fullMenuMap);
// 构建树
DashboardMenuTree tree = new DashboardMenuTree(visibleMenus);
List<DashboardTreeMenusDTO> result = tree.buildTree("-1");
// 叶子权限赋值
fillLeafPermission(result, permissionMap, superRole);
// 父节点统一赋值=2
fillParentPermission(result);
return SimpleDataResponse.success(result);
}
/**
* 补全父节点一次传入全量菜单 map
*/
private List<DashboardTreeMenusDTO> fillMissingParents(List<DashboardTreeMenusDTO> menuList,
Map<Long, DashboardTreeMenusDTO> fullMenuMap) {
Set<Long> allIds = menuList.stream().map(DashboardTreeMenusDTO::getMenuId).collect(Collectors.toSet());
Set<Long> missingParentIds = new HashSet<>();
for (DashboardTreeMenusDTO menu : menuList) {
Long pid = menu.getParentMenuId();
while (pid != null && !Objects.equals(pid, -1L) && !allIds.contains(pid)) {
missingParentIds.add(pid);
DashboardTreeMenusDTO parentMenu = fullMenuMap.get(pid);
if (parentMenu == null) break; // 防止死循环
pid = parentMenu.getParentMenuId();
}
}
for (Long pid : missingParentIds) {
DashboardTreeMenusDTO parentMenu = fullMenuMap.get(pid);
if (parentMenu != null) {
menuList.add(parentMenu);
}
}
return menuList;
}
/**
* 叶子赋权
*/
private void fillLeafPermission(List<DashboardTreeMenusDTO> nodes,
Map<Long, Integer> permissionMap, Integer superRole) {
for (DashboardTreeMenusDTO node : nodes) {
if (node.getDashboardLowestNode() != null && node.getDashboardLowestNode() == 1) {
if (superRole == 1) {
node.setPermissionType(2);
} else {
node.setPermissionType(permissionMap.getOrDefault(node.getMenuId(), 0));
}
}
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
fillLeafPermission(node.getChildren(), permissionMap, superRole);
}
}
}
/**
* 父节点权限统一赋值 2
*/
private void fillParentPermission(List<DashboardTreeMenusDTO> nodes) {
for (DashboardTreeMenusDTO node : nodes) {
if (node.getChildren() != null && !node.getChildren().isEmpty()) {
fillParentPermission(node.getChildren());
node.setPermissionType(2);
}
}
}
@Override
@Transactional
public void saveRolePermission(Long roleId, List<RoleMenuPermissionDTO> list) {
basicRoleMenuRelationMapperExt.deleteByRoleId(roleId);
if (list == null || list.isEmpty()) {
return;
}
List<RoleMenuPermissionEntity> entities = list.stream().map(item -> {
RoleMenuPermissionEntity entity = new RoleMenuPermissionEntity();
entity.setRoleId(roleId);
entity.setMenuId(item.getMenuId());
entity.setPermissionType(item.getPermissionType());
entity.setCreateTime(System.currentTimeMillis());
return entity;
}).collect(Collectors.toList());
basicRoleMenuRelationMapperExt.dashboardBatchInsert(entities);
}
@Override
public SimpleDataResponse<List<RoleMenuPermissionEntity>> getMenuIdListByRoleId(Long roleId, Long companyId, Long userId, Integer languageType) {
try {
return SimpleDataResponse.success(basicRoleMenuRelationMapperExt.getMenuIdListByRoleId(roleId));
} catch (Exception e) {
logger.error("获取角色菜单出错", e);
return new SimpleDataResponse(ResponseCode.SERVER_ERROR, e.getMessage());
}
}
}

Loading…
Cancel
Save