Browse Source

fix bug

master
刘力 3 years ago
parent
commit
97129283e0
  1. 3
      common/src/main/java/com/canvas/web/enums/ResponseEnum.java
  2. 2
      common/src/main/java/com/canvas/web/utils/CacheKey.java
  3. 34
      system/src/main/java/com/canvas/web/modules/security/controller/AuthorizationController.java
  4. 6
      system/src/main/java/com/canvas/web/modules/security/service/OnlineUserService.java
  5. 7
      system/src/main/java/com/canvas/web/modules/security/service/dto/OnlineUserDto.java
  6. 12
      system/src/main/java/com/canvas/web/modules/system/controller/MenuController.java
  7. 71
      system/src/main/java/com/canvas/web/modules/system/controller/RoleController.java
  8. 1
      system/src/main/java/com/canvas/web/modules/system/domain/Role.java
  9. 18
      system/src/main/java/com/canvas/web/modules/system/domain/vo/MenuMetaVo.java
  10. 28
      system/src/main/java/com/canvas/web/modules/system/domain/vo/MenuVo.java
  11. 4
      system/src/main/java/com/canvas/web/modules/system/repository/MenuRepository.java
  12. 7
      system/src/main/java/com/canvas/web/modules/system/repository/RoleRepository.java
  13. 2
      system/src/main/java/com/canvas/web/modules/system/service/MenuService.java
  14. 5
      system/src/main/java/com/canvas/web/modules/system/service/RoleService.java
  15. 46
      system/src/main/java/com/canvas/web/modules/system/service/dto/DeptDto.java
  16. 18
      system/src/main/java/com/canvas/web/modules/system/service/dto/MenuDto.java
  17. 2
      system/src/main/java/com/canvas/web/modules/system/service/dto/OrgSmallDto.java
  18. 7
      system/src/main/java/com/canvas/web/modules/system/service/dto/RoleDto.java
  19. 6
      system/src/main/java/com/canvas/web/modules/system/service/dto/UserDto.java
  20. 106
      system/src/main/java/com/canvas/web/modules/system/service/impl/MenuServiceImpl.java
  21. 89
      system/src/main/java/com/canvas/web/modules/system/service/impl/RoleServiceImpl.java
  22. 2
      system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java

3
common/src/main/java/com/canvas/web/enums/ResponseEnum.java

@ -77,7 +77,8 @@ public enum ResponseEnum {
* 角色模块
**/
ROLE_ADD_ERROR_EXIST_NAME(20010, "新增角色失败,角色名称已存在"),
ROLE_ADD_ERROR_EXIST_AUTHORITY(20011, "新增角色失败,角色权限已存在"),
ROLE_ADD_ERROR_EXIST_AUTHORITY(20011, "新增角色失败,角色权限已存在"),
ROLE_ADD_ERROR_EXIST_ID(20015,"新增角色失败,角色id异常"),
ROLE_UPDATE_ERROR_EXIST_NAME(20012, "修改角色失败,角色名称已存在"),
ROLE_UPDATE_ERROR_EXIST_AUTHORITY(20013, "修改角色失败,角色权限已存在"),
ROLE_UPDATE_ERROR(20014, "修改角色失败"),

2
common/src/main/java/com/canvas/web/utils/CacheKey.java

@ -23,7 +23,7 @@ public interface CacheKey {
/**
* 数据
*/
String DATE_USER = "data::user:";
String DATA_USER = "data::user:";
/**
* 菜单
*/

34
system/src/main/java/com/canvas/web/modules/security/controller/AuthorizationController.java

@ -64,7 +64,7 @@ public class AuthorizationController {
@ApiOperation("登录授权")
@AnonymousPostMapping(value = "/login")
public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
public Response<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
// 密码解密
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
// 查询验证码
@ -83,29 +83,29 @@ public class AuthorizationController {
// 生成令牌
String token = tokenProvider.createToken(authentication);
final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
// // 保存在线信息
// onlineUserService.save(jwtUserDto, token, request);
// 保存在线信息
onlineUserService.save(jwtUserDto, token, request);
// 返回 token 用户信息
Map<String, Object> authInfo = new HashMap<String, Object>(2) {{
put("token", properties.getTokenStartWith() + token);
put("user", jwtUserDto);
}};
// if (loginProperties.isSingleLogin()) {
// //踢掉之前已经登录的token
// onlineUserService.checkLoginOnUser(authUser.getUsername(), token);
// }
return ResponseEntity.ok(authInfo);
if (loginProperties.isSingleLogin()) {
//踢掉之前已经登录的token
onlineUserService.checkLoginOnUser(authUser.getUsername(), token);
}
return Response.success(authInfo);
}
@ApiOperation("获取用户信息")
@GetMapping(value = "/info")
public ResponseEntity<Object> getUserInfo() {
return ResponseEntity.ok(SecurityUtils.getCurrentUser());
public Response<Object> getUserInfo() {
return Response.success(SecurityUtils.getCurrentUser());
}
@ApiOperation("获取验证码")
@AnonymousGetMapping(value = "/code")
public ResponseEntity<Object> getCode() {
public Response<Object> getCode() {
// 获取运算的结果
Captcha captcha = loginProperties.getCaptcha();
String uuid = properties.getCodeKey() + IdUtil.simpleUUID();
@ -121,22 +121,22 @@ public class AuthorizationController {
put("img", captcha.toBase64());
put("uuid", uuid);
}};
return ResponseEntity.ok(imgResult);
return Response.success(imgResult);
}
@ApiOperation("退出登录")
@AnonymousDeleteMapping(value = "/logout")
public ResponseEntity<Object> logout(HttpServletRequest request) {
public Response<Object> logout(HttpServletRequest request) {
onlineUserService.logout(tokenProvider.getToken(request));
return new ResponseEntity<>(HttpStatus.OK);
return Response.success(ResponseEnum.SUCCESS);
}
@ApiOperation("短信验证码")
@AnonymousPostMapping(value = "/msg")
public ResponseEntity<Object> sendXMsg(@Validated @RequestBody MsgDto msgDto) {
public Response<Object> sendXMsg(@Validated @RequestBody MsgDto msgDto) {
UserDto userDto = userService.findByPhone(msgDto.getPhone());
if (userDto==null){
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
return new Response<>(HttpStatus.NO_CONTENT);
}
//加载短信配置文件
@ -155,7 +155,7 @@ public class AuthorizationController {
put("uuid", uuid);
}};
String response = submail.xsend();
return ResponseEntity.ok(msgResult);
return Response.success(msgResult);
}
@ApiOperation("客户端修改密码")

6
system/src/main/java/com/canvas/web/modules/security/service/OnlineUserService.java

@ -29,13 +29,13 @@ public class OnlineUserService {
public void save(JwtUserDto jwtUserDto, String token, HttpServletRequest request) {
//String dept = jwtUserDto.getUser().getName().getDept();
String org = jwtUserDto.getUser().getOrg().getName();
String ip = StringUtils.getIp(request);
String browser = StringUtils.getBrowser(request);
String address = StringUtils.getCityInfo(ip);
OnlineUserDto onlineUserDto = null;
try {
//onlineUserDto = new OnlineUserDto(jwtUserDto.getUsername(), jwtUserDto.getUser().getNickName(), dept, browser , ip, address, EncryptUtils.desEncrypt(token), new Date());
onlineUserDto = new OnlineUserDto(jwtUserDto.getUsername(), jwtUserDto.getUser().getPhone(),jwtUserDto.getUser().getNickName(), org, browser , ip, address, EncryptUtils.desEncrypt(token), new Date());
} catch (Exception e) {
log.error(e.getMessage(),e);
}
@ -108,7 +108,7 @@ public class OnlineUserService {
for (OnlineUserDto user : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("用户名", user.getUserName());
map.put("部门", user.getDept());
map.put("机构", user.getOrg());
map.put("登录IP", user.getIp());
map.put("登录地点", user.getAddress());
map.put("浏览器", user.getBrowser());

7
system/src/main/java/com/canvas/web/modules/security/service/dto/OnlineUserDto.java

@ -17,6 +17,11 @@ public class OnlineUserDto {
*/
private String userName;
/**
* 手机号
* */
private String phone;
/**
* 昵称
*/
@ -25,7 +30,7 @@ public class OnlineUserDto {
/**
* 岗位
*/
private String dept;
private String org;
/**
* 浏览器

12
system/src/main/java/com/canvas/web/modules/system/controller/MenuController.java

@ -4,8 +4,10 @@ package com.canvas.web.modules.system.controller;
import com.canvas.web.annotation.rest.AnonymousGetMapping;
import com.canvas.web.enums.ResponseEnum;
import com.canvas.web.modules.system.service.MenuService;
import com.canvas.web.modules.system.service.dto.MenuDto;
import com.canvas.web.modules.system.service.mapstruct.MenuMapper;
import com.canvas.web.utils.Response;
import com.canvas.web.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@ -15,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
@Api(tags = "菜单管理")
@ -32,6 +36,14 @@ public class MenuController {
return Response.success(menuService.getMenus(pid));
}
@GetMapping("/build")
@ApiOperation("获取前端所需菜单")
public Response<Object> buildMenus(){
List<MenuDto> menuDtoList =menuService.findByUser(SecurityUtils.getCurrentUserId());
List<MenuDto> menuDtos =menuService.buildTree(menuDtoList);
return Response.success(menuService.buildMenus(menuDtos));
}
@ApiOperation("新增权限-下拉列表-获取所有菜单")
@AnonymousGetMapping("/dropdown/menu")
public Response<Object> queryDropDow(){

71
system/src/main/java/com/canvas/web/modules/system/controller/RoleController.java

@ -0,0 +1,71 @@
package com.canvas.web.modules.system.controller;
import com.canvas.web.annotation.rest.AnonymousGetMapping;
import com.canvas.web.annotation.rest.AnonymousPostMapping;
import com.canvas.web.enums.ResponseEnum;
import com.canvas.web.exception.BaseException;
import com.canvas.web.modules.system.service.RoleService;
import com.canvas.web.modules.system.service.dto.RoleDto;
import com.canvas.web.modules.system.service.dto.RoleQueryCriteria;
import com.canvas.web.modules.system.service.dto.RoleSmallDto;
import com.canvas.web.modules.system.service.mapstruct.RoleMapper;
import com.canvas.web.utils.Response;
import com.canvas.web.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequiredArgsConstructor
@Api(tags = "角色管理")
@RequestMapping("/api/roles")
public class RoleController {
private final RoleService roleService;
private static final String ENTITY_NAME="role";
private final RoleMapper roleMapper;
@ApiOperation("新增角色")
@AnonymousPostMapping("/create")
public Response<Object> create(@Validated @RequestBody RoleDto roleDto){
if (roleDto.getId() !=null){
throw new BaseException("A new cannot already have an ID", ResponseEnum.ROLE_ADD_ERROR_EXIST_ID.getMessage());
}
//TODO:权限测试
// getLevels(roleDto.getLevel());
roleService.create(roleMapper.toEntity(roleDto));
return Response.success(ResponseEnum.ADD_SUCCESS);
}
@ApiOperation("查询角色")
@AnonymousGetMapping("/list")
public Response<Object> queryAllRole(RoleQueryCriteria criteria, Pageable pageable){
return new Response<>(roleService.queryAll(criteria,pageable));
}
private int getLevels(Integer level){
List<Integer> levels = roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList());
int min = Collections.min(levels);
if(level != null){
if(level < min){
throw new BaseException("权限不足,你的角色级别:" + min + ",低于操作的角色级别:" + level);
}
}
return min;
}
}

1
system/src/main/java/com/canvas/web/modules/system/domain/Role.java

@ -40,6 +40,7 @@ public class Role extends BaseEntity implements Serializable {
@ApiModelProperty(value = "菜单", hidden = true)
private Set<Menu> menus;
@ManyToMany
@JoinTable(name = "sys_roles_org",
joinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "id")},

18
system/src/main/java/com/canvas/web/modules/system/domain/vo/MenuMetaVo.java

@ -0,0 +1,18 @@
package com.canvas.web.modules.system.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
@Data
@AllArgsConstructor
public class MenuMetaVo implements Serializable {
private String title;
private String icon;
private Boolean noCache;
}

28
system/src/main/java/com/canvas/web/modules/system/domain/vo/MenuVo.java

@ -0,0 +1,28 @@
package com.canvas.web.modules.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MenuVo implements Serializable {
private String name;
private String path;
private Boolean hidden;
private String redirect;
private String component;
private Boolean alwaysShow;
private MenuMetaVo meta;
private List<MenuVo> children;
}

4
system/src/main/java/com/canvas/web/modules/system/repository/MenuRepository.java

@ -34,8 +34,8 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat
List<Menu> findByPidIsNull();
@Query(value = "SELECT m.* FROM sys_menu m INNER JOIN sys_roles_menus r ON m.menu_id = r.menu_id WHERE " +
" r.role_id IN ?1 AND type != ?2 order by m.menu_sort asc",nativeQuery = true)
LinkedHashSet<Menu> findByRoleIdsAndTypeNotAndShowPosition(Set<Long> roleIds, int type);
" r.role_id IN ?1 AND type != ?2 AND m.show_position = ?3 order by m.menu_sort asc",nativeQuery = true)
LinkedHashSet<Menu> findByRoleIdsAndTypeNotAndShowPosition(Set<Long> roleIds, int type,int showPosition);
//更新节点数目

7
system/src/main/java/com/canvas/web/modules/system/repository/RoleRepository.java

@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
import java.util.Set;
public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificationExecutor<Role> {
@ -27,4 +28,10 @@ public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificat
@Modifying
@Query(value = "delete from sys_roles_menus where menu_id = ?1",nativeQuery = true)
void untiedMenu(Long id);
//根据菜单id查询
@Query(value = "SELECT r.* FROM sys_role r, sys_roles_menus m WHERE " +
"r.role_id = m.role_id AND m.menu_id in ?1",nativeQuery = true)
List<Role> findInMenuId(List<Long> menuIds);
}

2
system/src/main/java/com/canvas/web/modules/system/service/MenuService.java

@ -27,6 +27,8 @@ public interface MenuService {
//构建菜单树
List<MenuDto> buildTree(List<MenuDto> menuDtos);
Object buildMenus(List<MenuDto> menuDtos);
//根据id查询
Menu findOne(Long id);

5
system/src/main/java/com/canvas/web/modules/system/service/RoleService.java

@ -24,8 +24,6 @@ public interface RoleService {
//根据角色查询角色级别
Integer findByRoles(Set<Role> roles);
//根据id 查询菜单
List<Role> findInMenuId(ArrayList<Long> longs);
//创建角色
void create(Role resources);
@ -47,4 +45,7 @@ public interface RoleService {
//带查询条件查询全部数据
List<RoleDto> queryAll(RoleQueryCriteria criteria);
//编辑
void update(RoleDto roleDto);
}

46
system/src/main/java/com/canvas/web/modules/system/service/dto/DeptDto.java

@ -0,0 +1,46 @@
package com.canvas.web.modules.system.service.dto;
import com.canvas.web.base.BaseDTO;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.util.Objects;
public class DeptDto extends BaseDTO implements Serializable {
private Long id;
private String name;
private Boolean enabled;
private Integer deptSort;
public Boolean getLeaf() {
return subCount <= 0;
}
public String getLabel() {
return name;
}
private Integer subCount;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DeptDto deptDto = (DeptDto) o;
return Objects.equals(id, deptDto.id) &&
Objects.equals(name, deptDto.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}

18
system/src/main/java/com/canvas/web/modules/system/service/dto/MenuDto.java

@ -15,7 +15,7 @@ public class MenuDto extends BaseDTO implements Serializable {
private Long id;
// private List<MenuDto> children;
private List<MenuDto> children;
private Integer type;
@ -23,7 +23,7 @@ public class MenuDto extends BaseDTO implements Serializable {
private String title;
// private Integer menuSort;
private Integer menuSort;
private String path;
@ -44,13 +44,13 @@ public class MenuDto extends BaseDTO implements Serializable {
private String icon;
// public Boolean getHasChildren() {
// return subCount > 0;
// }
//
// public Boolean getLeaf() {
// return subCount <= 0;
// }
public Boolean getHasChildren() {
return subCount > 0;
}
public Boolean getLeaf() {
return subCount <= 0;
}
public String getLabel() {
return title;

2
system/src/main/java/com/canvas/web/modules/system/service/dto/DeptSmallDto.java → system/src/main/java/com/canvas/web/modules/system/service/dto/OrgSmallDto.java

@ -5,7 +5,7 @@ import lombok.Data;
import java.io.Serializable;
@Data
public class DeptSmallDto implements Serializable {
public class OrgSmallDto implements Serializable {
private Long id;

7
system/src/main/java/com/canvas/web/modules/system/service/dto/RoleDto.java

@ -1,9 +1,12 @@
package com.canvas.web.modules.system.service.dto;
import com.alibaba.fastjson.annotation.JSONField;
import com.canvas.web.base.BaseDTO;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Objects;
import java.util.Set;
@ -16,10 +19,12 @@ public class RoleDto extends BaseDTO implements Serializable {
private Set<MenuDto> menus;
// private Set<DeptDto> depts;
private Set<OrgDto> orgDtos;
@NotBlank(message = "角色名称不能为空")
private String name;
@JsonProperty("data_scope")
private String dataScope;
private Integer level;

6
system/src/main/java/com/canvas/web/modules/system/service/dto/UserDto.java

@ -18,11 +18,7 @@ public class UserDto extends BaseDTO implements Serializable {
private Set<RoleSmallDto> roles;
// private Set<JobSmallDto> jobs;
//
// private DeptSmallDto dept;
private Long deptId;
private OrgSmallDto org;
private String username;

106
system/src/main/java/com/canvas/web/modules/system/service/impl/MenuServiceImpl.java

@ -1,11 +1,14 @@
package com.canvas.web.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.canvas.web.enums.ResponseEnum;
import com.canvas.web.exception.BaseException;
import com.canvas.web.modules.system.domain.Menu;
import com.canvas.web.modules.system.domain.Role;
import com.canvas.web.modules.system.domain.User;
import com.canvas.web.modules.system.domain.vo.MenuMetaVo;
import com.canvas.web.modules.system.domain.vo.MenuVo;
import com.canvas.web.modules.system.repository.MenuRepository;
import com.canvas.web.modules.system.repository.UserRepository;
import com.canvas.web.modules.system.service.MenuService;
@ -13,6 +16,7 @@ import com.canvas.web.modules.system.service.RoleService;
import com.canvas.web.modules.system.service.dto.MenuDto;
import com.canvas.web.modules.system.service.dto.MenuQueryCriteria;
import com.canvas.web.modules.system.service.dto.MenuSmallDto;
import com.canvas.web.modules.system.service.dto.RoleSmallDto;
import com.canvas.web.modules.system.service.mapstruct.MenuMapper;
import com.canvas.web.modules.system.service.mapstruct.MenuSmallMapper;
import com.canvas.web.utils.QueryHelp;
@ -27,9 +31,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@ -67,11 +69,11 @@ public class MenuServiceImpl implements MenuService {
if (resources.getPid().equals(0L)) {
resources.setPid(null);
}
if (resources.getIFrame()) {
String http = "http://", https = "https://";
if (!resources.getPath().toLowerCase().startsWith(http)||resources.getPath().toLowerCase().startsWith(https));
throw new BaseException("外链必须以://或者https://");
}
// if (resources.getIFrame()) {
// String http = "http://", https = "https://";
// if (!resources.getPath().toLowerCase().startsWith(http)||resources.getPath().toLowerCase().startsWith(https));
// throw new BaseException("外链必须以://或者https://");
// }
menuRepository.save(resources);
resources.setSubCount(0);
updateSubCnt(resources.getId());
@ -152,12 +154,91 @@ public class MenuServiceImpl implements MenuService {
@Override
public Set<Menu> getChildMenus(List<Menu> menuList, Set<Menu> menuSet) {
return null;
for (Menu menu : menuList){
menuSet.add(menu);
List<Menu> menus =menuRepository.findByPid(menu.getId());
if (menus!=null && menus.size()!=0){
getChildMenus(menus,menuSet);
}
}
return menuSet;
}
@Override
public List<MenuDto> buildTree(List<MenuDto> menuDtos) {
return null;
List<MenuDto> trees =new ArrayList<>();
Set<Long> ids =new HashSet<>();
for (MenuDto menuDto :menuDtos){
if (menuDto.getPid() == null){
trees.add(menuDto);
}
for (MenuDto it:menuDtos){
if (menuDto.getId().equals(it.getPid())){
if (menuDto.getChildren() == null){
menuDto.setChildren(new ArrayList<>());
}
menuDto.getChildren().add(it);
ids.add(it.getId());
}
}
}
if (trees.size() == 0){
trees =menuDtos.stream().filter(s->!ids.contains(s.getId())).collect(Collectors.toList());
}
return trees;
}
@Override
public List<MenuVo> buildMenus(List<MenuDto> menuDtos) {
List<MenuVo> list=new ArrayList<>();
menuDtos.forEach(menuDTO -> {
if (menuDTO!=null){
List<MenuDto> menuDtoList = menuDTO.getChildren();
MenuVo menuVo = new MenuVo();
menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getTitle());
// 一级目录需要加斜杠不然会报警告
menuVo.setPath(menuDTO.getPid() == null ? "/" + menuDTO.getPath() :menuDTO.getPath());
menuVo.setHidden(menuDTO.getHidden());
// 如果不是外链
if(!menuDTO.getIFrame()){
if(menuDTO.getPid() == null){
menuVo.setComponent(StringUtils.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent());
// 如果不是一级菜单并且菜单类型为目录则代表是多级菜单
}else if(menuDTO.getType() == 0){
menuVo.setComponent(StringUtils.isEmpty(menuDTO.getComponent())?"ParentView":menuDTO.getComponent());
}else if(StringUtils.isNoneBlank(menuDTO.getComponent())){
menuVo.setComponent(menuDTO.getComponent());
}
}
menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(),menuDTO.getIcon(),!menuDTO.getCache()));
if(CollectionUtil.isNotEmpty(menuDtoList)){
menuVo.setAlwaysShow(true);
menuVo.setRedirect("noredirect");
menuVo.setChildren(buildMenus(menuDtoList));
// 处理是一级菜单并且没有子菜单的情况
} else if(menuDTO.getPid() == null){
MenuVo menuVo1 = new MenuVo();
menuVo1.setMeta(menuVo.getMeta());
// 非外链
if(!menuDTO.getIFrame()){
menuVo1.setPath("index");
menuVo1.setName(menuVo.getName());
menuVo1.setComponent(menuVo.getComponent());
} else {
menuVo1.setPath(menuDTO.getPath());
}
menuVo.setName(null);
menuVo.setMeta(null);
menuVo.setComponent("Layout");
List<MenuVo> list1 = new ArrayList<>();
list1.add(menuVo1);
menuVo.setChildren(list1);
}
list.add(menuVo);
}
}
);
return list;
}
@Override
@ -186,7 +267,10 @@ public class MenuServiceImpl implements MenuService {
@Override
public List<MenuDto> findByUser(Long currentUserId) {
return null;
List<RoleSmallDto> roleSmallDtos =roleService.findByUsersId(currentUserId);
Set<Long> roleIds = roleSmallDtos.stream().map(RoleSmallDto::getId).collect(Collectors.toSet());
LinkedHashSet<Menu> menus =menuRepository.findByRoleIdsAndTypeNotAndShowPosition(roleIds,2,1);
return menus.stream().map(menuMapper::toDto).collect(Collectors.toList());
}
@Override

89
system/src/main/java/com/canvas/web/modules/system/service/impl/RoleServiceImpl.java

@ -1,7 +1,12 @@
package com.canvas.web.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.canvas.web.enums.ResponseEnum;
import com.canvas.web.exception.BaseException;
import com.canvas.web.modules.security.service.UserCacheClean;
import com.canvas.web.modules.system.domain.Menu;
import com.canvas.web.modules.system.domain.Role;
import com.canvas.web.modules.system.domain.User;
import com.canvas.web.modules.system.repository.RoleRepository;
import com.canvas.web.modules.system.repository.UserRepository;
import com.canvas.web.modules.system.service.RoleService;
@ -11,17 +16,21 @@ import com.canvas.web.modules.system.service.dto.RoleSmallDto;
import com.canvas.web.modules.system.service.dto.UserDto;
import com.canvas.web.modules.system.service.mapstruct.RoleMapper;
import com.canvas.web.modules.system.service.mapstruct.RoleSmallMapper;
import com.canvas.web.utils.QueryHelp;
import com.canvas.web.utils.*;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@ -30,18 +39,30 @@ public class RoleServiceImpl implements RoleService {
private final RoleRepository roleRepository;
private final RoleMapper roleMapper;
private final RedisUtils redisUtils;
private final RoleSmallMapper roleSmallMapper;
private final UserRepository userRepository;
private final UserCacheClean userCacheClean;
@Override
public List<GrantedAuthority> mapToGrantedAuthorities(UserDto user) {
return null;
Set<String> permissions= new HashSet<>();
//如果是管理员直接返回
if (user.getIsAdmin()){
permissions.add("admin");
return permissions.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList());
}
Set<Role> roles =roleRepository.findByUserId(user.getId());
permissions = roles.stream().flatMap(role -> role.getMenus().stream())
.filter(menu -> StringUtils.isNotBlank(menu.getPermission()))
.map(Menu::getPermission).collect(Collectors.toSet());
return permissions.stream().map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
}
@Override
public List<RoleSmallDto> findByUsersId(Long id) {
return null;
return roleSmallMapper.toDto(new ArrayList<>(roleRepository.findByUserId(id)));
}
@Override
@ -50,20 +71,26 @@ public class RoleServiceImpl implements RoleService {
}
@Override
public List<Role> findInMenuId(ArrayList<Long> longs) {
return null;
public List<Role> findInMenuId(List<Long> menuIds) {
return roleRepository.findInMenuId(menuIds);
}
@Override
public void create(Role resources) {
if (roleRepository.findByName(resources.getName()) != null) {
throw new BaseException("username", ResponseEnum.ROLE_ADD_ERROR_EXIST_NAME.getMessage());
}
roleRepository.save(resources);
}
@Override
public void delete(Set<Long> ids) {
for (Long id : ids) {
// 更新相关缓存
delCaches(id, null);
}
roleRepository.deleteAllByIdIn(ids);
}
@Override
@ -71,24 +98,58 @@ public class RoleServiceImpl implements RoleService {
}
@Override
public List<Role> findInMenuId(List<Long> menuIds) {
return null;
}
@Override
public List<RoleDto> queryAll() {
Sort sort=Sort.by(Sort.Direction.ASC,"level");
Sort sort = Sort.by(Sort.Direction.ASC, "level");
return roleMapper.toDto(roleRepository.findAll(sort));
}
@Override
public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) {
return null;
Page<Role> page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(roleMapper::toDto));
}
@Override
public List<RoleDto> queryAll(RoleQueryCriteria criteria) {
return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
}
@Override
public void update(RoleDto roleDto) {
Role role = roleRepository.findById(roleDto.getId()).orElseGet(Role::new);
ValidationUtil.isNull(role.getId(), "Role", "id", roleDto.getId());
Role role1 = roleRepository.findByName(roleDto.getName());
if (role1 != null && !role1.getId().equals(role.getId())) {
throw new BaseException("username", roleDto.getName());
}
//传输DTO转换实体
Role role2 = roleMapper.toEntity(roleDto);
role.setName(role2.getName());
role.setDescription(role2.getDescription());
role.setDataScope(role2.getDataScope());
role.setLevel(role2.getLevel());
role.setOrg(role2.getOrg());
roleRepository.save(role);
// 更新相关缓存
delCaches(role.getId(), null);
}
//清理缓存
public void delCaches(Long id, List<User> users) {
users = CollectionUtil.isEmpty(users) ? userRepository.findByRoleId(id) : users;
if (CollectionUtil.isNotEmpty(users)) {
users.forEach(item -> userCacheClean.cleanUserCache(item.getUsername()));
Set<Long> userIds = users.stream().map(User::getId).collect(Collectors.toSet());
redisUtils.delByKeys(CacheKey.DATA_USER, userIds);
redisUtils.delByKeys(CacheKey.MENU_USER, userIds);
redisUtils.delByKeys(CacheKey.ROLE_AUTH, userIds);
}
redisUtils.del(CacheKey.ROLE_ID + id);
}
}

2
system/src/main/java/com/canvas/web/modules/system/service/impl/UserServiceImpl.java

@ -71,7 +71,7 @@ public class UserServiceImpl implements UserService{
//需求手机号就是用户名所以根据此处username 实际是手机号
@Override
public UserDto findByName(String userName) {
User user = userRepository.findByPhone(userName);
User user = userRepository.findByUsername(userName);
if (user == null) {
throw new EntityNotFoundException(User.class, "name", userName);
} else {

Loading…
Cancel
Save