diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/menu/mapper/AdminMenuMapper.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/menu/mapper/AdminMenuMapper.java index 54aecfff1e3b7b8deee23e5f398c22b87f4258c5..507def07547c46c68d1dde2db094afccbbfa396c 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/menu/mapper/AdminMenuMapper.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/menu/mapper/AdminMenuMapper.java @@ -19,6 +19,6 @@ public interface AdminMenuMapper extends Mapper { * @param roleId 角色Id * @return */ - List selectMenuByRoleId(@Param("roleId") String roleId); + List selectMenuByRoleId(@Param("roleId") List roleId); } diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/role/biz/AdminRoleBiz.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/role/biz/AdminRoleBiz.java index cddd492062cca2f7867fca2d98f32df0cf2248fd..55a7841990cef96b08f5f1926fc5a575530af7fa 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/role/biz/AdminRoleBiz.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/role/biz/AdminRoleBiz.java @@ -63,7 +63,9 @@ public class AdminRoleBiz extends BaseBiz { * @param roleId */ public List selectAuthorityMenuTree(String roleId) { - List roleMenus = bulid(menuMapper.selectAll(), "root", roleId); + List roleIds = new ArrayList<>(); + roleIds.add(roleId); + List roleMenus = bulid(menuMapper.selectAll(), "root", roleIds); return roleMenus; } @@ -137,12 +139,16 @@ public class AdminRoleBiz extends BaseBiz { return resultRole; } - public List checkAuthorityElements(String roleId) throws Exception { + public List checkAuthorityElements(List roleId) throws Exception { List roleElements; //获取roleid下的所有的接口 - AdminResourcerolemapEntity temp = new AdminResourcerolemapEntity(); - temp.setRoleId(roleId); - roleElements = resourceRoleMapMapper.select(temp); + /*AdminResourcerolemapEntity temp = new AdminResourcerolemapEntity(); + temp.setRoleId(roleId);*/ + Example example = new Example(AdminResourcerolemapEntity.class); + Example.Criteria criteria = example.createCriteria(); + criteria.andIn("roleId",roleId); + roleElements = resourceRoleMapMapper.selectByExample(example); + //roleElements = resourceRoleMapMapper.select(temp); List elements = roleElements.parallelStream().filter(element -> Objects.equals(element.getResourceType(), AdminCommonConstant.RESOURCE_TYPE_BTN)).collect(Collectors.toList()); List menus = roleElements.parallelStream().filter(element -> Objects.equals(element.getResourceType(), AdminCommonConstant.RESOURCE_TYPE_MENU)).collect(Collectors.toList()); //遍历所有的按钮权限,获取按钮对应的菜单的短地址,用作按钮的短地址 @@ -172,7 +178,8 @@ public class AdminRoleBiz extends BaseBiz { }); return permissionElementDtos; } - public List authorityMenus(String roleId) { + //public List authorityMenus(String roleId) { + public List authorityMenus(List roleId) { //定义固定返回参数 List resultPermission = new ArrayList<>(); //获取权限下的menu @@ -200,7 +207,7 @@ public class AdminRoleBiz extends BaseBiz { * @param root * @return */ - public List bulid(List menus, Object root, String roleId) { + public List bulid(List menus, Object root, List roleId) { List trees = new ArrayList(); for (AdminMenuEntity treeNode : menus) { if (Objects.equals(AdminCommonConstant.BASE_MENU_TYPE, treeNode.getType())) { @@ -215,7 +222,7 @@ public class AdminRoleBiz extends BaseBiz { return trees; } - private void setChildren(AdminMenuDto treeNode, List menus, String roleId) { + private void setChildren(AdminMenuDto treeNode, List menus, List roleId) { for (AdminMenuEntity it : menus) { if (Objects.equals(AdminCommonConstant.BASE_MENU_TYPE, it.getType())) { continue; @@ -230,7 +237,7 @@ public class AdminRoleBiz extends BaseBiz { } } - private AdminMenuDto transferMenuDto(AdminMenuEntity adminMenuEntity, String roleId) { + private AdminMenuDto transferMenuDto(AdminMenuEntity adminMenuEntity, List roleId) { AdminMenuDto menuDto = new AdminMenuDto(); menuDto.setParentId(adminMenuEntity.getParentId()); menuDto.setId(adminMenuEntity.getId()); @@ -238,7 +245,7 @@ public class AdminRoleBiz extends BaseBiz { AdminMetaDto metaDto = JSONObject.parseObject(JSONObject.toJSONString(adminMenuEntity), AdminMetaDto.class); menuDto.setMeta(metaDto); //按角色渲染菜单和按钮 - if (!StringUtils.isEmpty(roleId)) { + if (roleId != null && roleId.size() != 0) { menuDto.setCheckout(getCheckout(roleId, adminMenuEntity.getId(), AdminCommonConstant.RESOURCE_TYPE_MENU)); //设置menu下的被选中的权限按钮 menuDto.setElements(getRoleMenuElements(roleId, adminMenuEntity.getId())); @@ -246,8 +253,9 @@ public class AdminRoleBiz extends BaseBiz { return menuDto; } - private boolean getCheckout(String roleId, String resourceId, String type) { + private boolean getCheckout(List roleId, String resourceId, String type) { //如果是超级管理员直接返回true + boolean bool = roleId.stream().filter(item -> Objects.equals(item, sysAuthConfig.getSysUsername())).findAny().isPresent(); if (Objects.equals(roleId, sysAuthConfig.getSysUsername())) { return true; } @@ -258,21 +266,30 @@ public class AdminRoleBiz extends BaseBiz { /** * 获取角色资源表中的菜单和按钮信息 * - * @param roleId + * @param roleIds * @param mapId * @param type * @return */ - private List getResourceRole(String roleId, String mapId, String type) { - AdminResourcerolemapEntity temp = new AdminResourcerolemapEntity(); - temp.setRoleId(roleId); - temp.setResourceId(mapId); - temp.setResourceType(type); - return adminResourcerolemapBiz.selectList(temp); + private List getResourceRole(List roleIds, String mapId, String type) { + List ret = new ArrayList<>(); + for(String roleId : roleIds){ + AdminResourcerolemapEntity temp = new AdminResourcerolemapEntity(); + temp.setRoleId(roleId); + temp.setResourceId(mapId); + temp.setResourceType(type); + ret.addAll(adminResourcerolemapBiz.selectList(temp)); + } + //按照id查重 + List unique = ret.stream().collect( + Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(AdminResourcerolemapEntity :: getId))), ArrayList::new) + ); + return unique; } - private List getRoleMenuElements(String roleId, String menuId) { - if (StringUtils.isEmpty(roleId) || StringUtils.isEmpty(menuId)) { + private List getRoleMenuElements(List roleId, String menuId) { + if (roleId == null || StringUtils.isEmpty(menuId)) { return null; } AdminElementEntity elementTemp = new AdminElementEntity(); diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/biz/AdminStaffBiz.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/biz/AdminStaffBiz.java index 0a06a27904a524b1a5d1c45a7ba4f9673ae8d2a0..59ce01e55ac7ddcbdbf45079808653b7f6c6adab 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/biz/AdminStaffBiz.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/biz/AdminStaffBiz.java @@ -8,6 +8,7 @@ import com.gitee.neuray.security.admin.authority.PermissionElementDto; import com.gitee.neuray.security.admin.constant.AdminCommonConstant; import com.gitee.neuray.security.admin.dto.AdminUser; import com.gitee.neuray.security.admin.dto.PmUserDto; +import com.gitee.neuray.security.admin.element.entity.AdminElementEntity; import com.gitee.neuray.security.admin.exception.AdminException; import com.gitee.neuray.security.admin.feign.WbFeign; import com.gitee.neuray.security.admin.org.biz.AdminOrgBiz; @@ -19,6 +20,7 @@ import com.gitee.neuray.security.admin.user.vo.AdminStaffVo; import com.gitee.neuray.security.admin.user.vo.AdminUserVo; import com.gitee.neuray.security.admin.userrole.biz.AdminRoleusermapBiz; import com.gitee.neuray.security.admin.userrole.entity.AdminRoleusermapEntity; +import com.gitee.neuray.security.admin.userrole.mapper.AdminRoleusermapMapper; import com.gitee.neuray.security.admin.vo.FrontUser; import com.gitee.neuray.security.admin.vo.UserRole; import com.gitee.neuray.security.auth.client.config.SysAuthConfig; @@ -29,6 +31,7 @@ import com.gitee.neuray.security.common.msg.TableResultResponse; import com.gitee.neuray.security.common.util.Query; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import org.apache.catalina.User; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -36,10 +39,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.lang.reflect.ParameterizedType; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; import org.springframework.transaction.annotation.Transactional; @@ -71,6 +71,9 @@ public class AdminStaffBiz extends BaseBiz { private AdminRoleBiz roleBiz; @Autowired private WbFeign wbFeign; + @Autowired + private AdminRoleusermapMapper roleUserMapper; + @Override protected String getPageName() { @@ -136,10 +139,15 @@ public class AdminStaffBiz extends BaseBiz { if(StringUtils.isEmpty(adminUserDto.getRoleId())){ throw new BaseException("请设置角色..."); } - AdminRoleusermapEntity userRole = new AdminRoleusermapEntity(); - userRole.setUserId(staffEntity.getId()); - userRole.setRoleId(adminUserDto.getRoleId()); - adminRoleusermapBiz.insertSelective(userRole); + List roleIds = adminUserDto.getRoleId(); + for(String roleId : roleIds){ + AdminRoleusermapEntity userRole = new AdminRoleusermapEntity(); + userRole.setUserId(staffEntity.getId()); + userRole.setRoleId(roleId); + /*userRole.setUserId(staffEntity.getId()); + userRole.setRoleId(adminUserDto.getRoleId());*/ + adminRoleusermapBiz.insert(userRole); + } } @Override @@ -154,14 +162,22 @@ public class AdminStaffBiz extends BaseBiz { if(StringUtils.isEmpty(id)){ throw new BaseException("id不能为空..."); } - AdminUserVo vo = new AdminUserVo(); + AdminRoleusermapEntity adminRoleusermaptemp = new AdminRoleusermapEntity(); adminRoleusermaptemp.setUserId(id); - AdminRoleusermapEntity userRole = adminRoleusermapBiz.selectOne(adminRoleusermaptemp); + List userRoles = adminRoleusermapBiz.selectList(adminRoleusermaptemp); + List roleIds = new ArrayList<>(); //获取用户角色 - if(userRole != null && !StringUtils.isEmpty(userRole.getRoleId())){ - vo.setAdminRoleEntity(adminRoleBiz.selectById(userRole.getRoleId())); + AdminUserVo vo = new AdminUserVo(); + if(userRoles != null ){ + for(AdminRoleusermapEntity userRole:userRoles){ + if(userRole != null && !StringUtils.isEmpty(userRole.getRoleId())){ + AdminRoleEntity adminRoleEntity = adminRoleBiz.selectById(userRole.getRoleId()); + roleIds.add(adminRoleEntity); + } + } } + vo.setAdminRoleEntity(roleIds); //获取用户基本信息 AdminStaffEntity adminStaffEntity = super.selectById(id); AdminOrgEntity adminOrgEntity = adminOrgBiz.selectById(adminStaffEntity.getDeptCode()); @@ -180,21 +196,44 @@ public class AdminStaffBiz extends BaseBiz { //更新员工的基本信息 updateSelectiveById(adminStaffEntity); //更新角色信息 - if(!StringUtils.isEmpty(userDto.getRoleId())){ + if(userDto.getRoleId() != null && userDto.getRoleId().size() != 0){ AdminRoleusermapEntity temp = new AdminRoleusermapEntity(); temp.setUserId(userDto.getId()); - AdminRoleusermapEntity userRole = adminRoleusermapBiz.selectOne(temp); + List userRoles = adminRoleusermapBiz.selectList(temp); //属于修改 - if(userRole != null && !StringUtils.isEmpty(userRole.getRoleId())){ - userRole.setRoleId(userDto.getRoleId()); - adminRoleusermapBiz.updateSelectiveById(userRole); - return; + if(userRoles != null){ + List roles = userDto.getRoleId(); + Example params = new Example(AdminRoleusermapEntity.class); + params.createCriteria().andEqualTo("userId",userDto.getId()); + roleUserMapper.deleteByExample(params); + + for(String str : roles){ + AdminRoleusermapEntity userRole = new AdminRoleusermapEntity(); + userRole.setUserId(userDto.getId()); + userRole.setRoleId(str); + adminRoleusermapBiz.insertSelective(userRole); + } + /*for(AdminRoleusermapEntity userRole:userRoles){ + if(userRole != null && !StringUtils.isEmpty(userRole.getRoleId())){ + userRole.setRoleId(userDto.getRoleId()); + adminRoleusermapBiz.updateSelectiveById(userRole); + return; + } + //属于新增 + userRole = new AdminRoleusermapEntity(); + userRole.setUserId(userDto.getId()); + userRole.setRoleId(userDto.getRoleId()); + adminRoleusermapBiz.insertSelective(userRole); + }*/ + }else{ + List roles = userDto.getRoleId(); + for(String str : roles){ + AdminRoleusermapEntity userRole = new AdminRoleusermapEntity(); + userRole.setUserId(userDto.getId()); + userRole.setRoleId(str); + adminRoleusermapBiz.insertSelective(userRole); + } } - //属于新增 - userRole = new AdminRoleusermapEntity(); - userRole.setUserId(userDto.getId()); - userRole.setRoleId(userDto.getRoleId()); - adminRoleusermapBiz.insertSelective(userRole); } } @@ -274,7 +313,9 @@ public class AdminStaffBiz extends BaseBiz { BeanUtils.copyProperties(adminStaffEntity, frontUser); frontUser.setId(adminStaffEntity.getId()); } - UserRole userRole = this.getUserRoleByUserId(userId); + // todo 现在是一个用户对多个角色 + //UserRole userRole = this.getUserRoleByUserId(userId); + List userRole = this.getUserRoleByUserId(userId); frontUser.setUserRole(userRole); Map param = new HashMap<>(); @@ -289,20 +330,29 @@ public class AdminStaffBiz extends BaseBiz { * @param userId * @return */ - public UserRole getUserRoleByUserId(String userId) { - UserRole userRole = new UserRole(); + public List getUserRoleByUserId(String userId) { + List userRoles = new ArrayList<>(); //如果是超级管理员 if(Objects.equals(userId,sysAuthConfig.getSysUsername())){ + UserRole userRole = new UserRole(); userRole.setMenus(getMeusByUserId(userId)); userRole.setId("system"); userRole.setName("超级管理员"); - return userRole; + userRoles.add(userRole); + return userRoles; } List roleList = roleBiz.getRoleByUserId(userId); //使用list可能有点不太对劲 - BeanUtils.copyProperties(roleList.get(0), userRole); - userRole.setMenus(getMeusByUserId(userId)); - return userRole; + // BeanUtils.copyProperties(roleList.get(0), userRole); + // todo 循环roleList设置role的muenu + for(AdminRoleEntity roleEntity : roleList){ + UserRole userRole = new UserRole(); + BeanUtils.copyProperties(roleEntity, userRole); + // todo 有点问题,每个role都设置了一边相同的menu + userRoles.add(userRole); + userRole.setMenus(getMeusByUserId(userId)); + } + return userRoles; } /** @@ -312,7 +362,7 @@ public class AdminStaffBiz extends BaseBiz { * @return */ public List getPermissionByUserId(String userId) throws Exception { - String roleId = getRoleId(userId); + List roleId = getRoleId(userId); List permissionElementDtos = roleBiz.checkAuthorityElements(roleId); return permissionElementDtos; } @@ -323,22 +373,27 @@ public class AdminStaffBiz extends BaseBiz { * @return */ public List getMeusByUserId(String userId) { - String roleId = getRoleId(userId); + List roleId = getRoleId(userId); List adminMenuDtos = roleBiz.authorityMenus(roleId); return adminMenuDtos; } - private String getRoleId(String userId){ - String roleId = null; + private List getRoleId(String userId){ + //String roleId = null; + List roles = new ArrayList<>(); if(Objects.equals(userId,sysAuthConfig.getSysUsername())) { - roleId = userId; + //roleId = userId; + roles.add(userId); }else{ List roleByUserId = roleBiz.getRoleByUserId(userId); if(roleByUserId.size()==0){ throw new BaseException("该人员没有访问权限..."); } - roleId = roleByUserId.get(0).getId(); + for(AdminRoleEntity roleEntity : roleByUserId){ + roles.add(roleEntity.getId()); + } + // roleId = roleByUserId.get(0).getId(); } - return roleId; + return roles; } } diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/dto/AdminUserDto.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/dto/AdminUserDto.java index d7e9a99f722be20082b59fa1a27c89b3cb5e99e7..336038f688302d63a67833301d70bb5d6dc1a121 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/dto/AdminUserDto.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/dto/AdminUserDto.java @@ -3,6 +3,7 @@ package com.gitee.neuray.security.admin.user.dto; import lombok.Data; import java.util.Date; +import java.util.List; /** * @author: zhhongyu @@ -290,5 +291,5 @@ public class AdminUserDto { /** * 角色id */ - private String roleId; + private List roleId; } diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/vo/AdminUserVo.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/vo/AdminUserVo.java index 15c4aae8c88a1e815394260f368961cb64019b83..8ffd5d40e64e483bb52a8a67f3380a59be35e758 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/vo/AdminUserVo.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/user/vo/AdminUserVo.java @@ -3,6 +3,8 @@ package com.gitee.neuray.security.admin.user.vo; import com.gitee.neuray.security.admin.role.entity.AdminRoleEntity; import lombok.Data; +import java.util.List; + /** * @author: zhhongyu * @description: @@ -11,5 +13,5 @@ import lombok.Data; @Data public class AdminUserVo { private AdminStaffVo adminStaffEntity; - private AdminRoleEntity adminRoleEntity; + private List adminRoleEntity; } diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/vo/FrontUser.java b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/vo/FrontUser.java index 4b344036bfbc7fd779ee2fca9489d8bf02d014d1..a7237a5e45ff431dc62b92592ff2103aa7535078 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/vo/FrontUser.java +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/java/com/gitee/neuray/security/admin/vo/FrontUser.java @@ -65,7 +65,7 @@ public class FrontUser { */ private String positions; - private UserRole userRole; + private List userRole; private List roles; diff --git a/neuray-pm-provider/neuray-pm-provider-admin/src/main/resources/mapper/AdminMenuMapper.xml b/neuray-pm-provider/neuray-pm-provider-admin/src/main/resources/mapper/AdminMenuMapper.xml index 5020e51d225ae053ea1320fd5fc685fc31225e46..2ab6c40c7a90fd0368578b48de86f43f9fbab37b 100644 --- a/neuray-pm-provider/neuray-pm-provider-admin/src/main/resources/mapper/AdminMenuMapper.xml +++ b/neuray-pm-provider/neuray-pm-provider-admin/src/main/resources/mapper/AdminMenuMapper.xml @@ -31,11 +31,15 @@