Browse Source

Merge remote-tracking branch 'remotes/origin/wxz_oper_access' into 烟台master

dev
jianjun 3 years ago
parent
commit
4594514531
  1. 24
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/HasOperPermissionFormDTO.java
  2. 13
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OperResouce.java
  3. 46
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonOperAccessOpenFeignClient.java
  4. 35
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallback.java
  5. 19
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallbackFactory.java
  6. 21
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  7. 26
      epmet-gateway/src/main/java/com/epmet/GatewayApplication.java
  8. 70
      epmet-gateway/src/main/java/com/epmet/auth/InternalAuthProcessor.java
  9. 11
      epmet-gateway/src/main/java/com/epmet/filter/CpProperty.java
  10. 5
      epmet-gateway/src/main/java/com/epmet/filter/EpmetGatewayFilter.java
  11. 5
      epmet-gateway/src/main/resources/bootstrap-urls.yml
  12. 1
      epmet-gateway/src/main/resources/bootstrap.yml
  13. 4
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/result/UploadImgResultDTO.java
  14. 1
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
  15. 24
      epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/form/HasOperPermissionFormDTO.java
  16. 13
      epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/result/OperResouce.java
  17. 17
      epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/OperAccessOpenFeignClient.java
  18. 11
      epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/fallback/OperAccessOpenFeignClientFallback.java
  19. 39
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java
  20. 5
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java
  21. 24
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java
  22. 5
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java
  23. 69
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java
  24. 23
      epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperRoleServiceImpl.java
  25. 22
      epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml
  26. 15
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/OperUserServiceImpl.java

24
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/HasOperPermissionFormDTO.java

@ -0,0 +1,24 @@
package com.epmet.commons.tools.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class HasOperPermissionFormDTO {
/**
* uri
*/
@NotBlank(message = "uri不能为空")
private String uri;
/**
* http方法
*/
@NotBlank(message = "请求http方法不能为空")
private String method;
@NotBlank(message = "操作者ID不能为空")
private String operId;
}

13
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OperResouce.java

@ -0,0 +1,13 @@
package com.epmet.commons.tools.dto.result;
import lombok.Data;
@Data
public class OperResouce {
private String userId;
private String resourceUrl;
private String ResourceMethod;
}

46
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonOperAccessOpenFeignClient.java

@ -0,0 +1,46 @@
package com.epmet.commons.tools.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.HasOperPermissionFormDTO;
import com.epmet.commons.tools.dto.result.OperResouce;
import com.epmet.commons.tools.feign.fallback.CommonOperAccessOpenFeignClientFallbackFactory;
import com.epmet.commons.tools.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @Description 运营端权限模块
* @Author yinzuomei
* @Date 2020/5/21 15:17 本服务对外开放的API,其他服务通过引用此client调用该服务
*/
@FeignClient(name = ServiceConstant.OPER_ACCESS_SERVER, fallbackFactory = CommonOperAccessOpenFeignClientFallbackFactory.class)
//@FeignClient(name = ServiceConstant.OPER_ACCESS_SERVER, fallbackFactory = CommonOperAccessOpenFeignClientFallbackFactory.class, url = "http://localhost:8093")
public interface CommonOperAccessOpenFeignClient {
/**
* @param
* @return com.epmet.commons.tools.utils.Result
* @Author yinzuomei
* @Description 清空运营人员权限信息菜单信息
* @Date 2020/5/21 17:08
**/
@GetMapping("/oper/access/menu/clearoperuseraccess")
Result clearOperUserAccess();
/**
* 是否有该接口的权限
* @return
*/
@PostMapping("/oper/access/menu/hasPermission")
Result hasOperPermission(@RequestBody HasOperPermissionFormDTO form);
/**
* 需要验证的菜单资源
* @return
*/
@PostMapping("/oper/access/menu/getExamineResourceUrls")
Result<List<OperResouce>> getExamineResourceUrls();
}

35
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallback.java

@ -0,0 +1,35 @@
package com.epmet.commons.tools.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.HasOperPermissionFormDTO;
import com.epmet.commons.tools.dto.result.OperResouce;
import com.epmet.commons.tools.feign.CommonOperAccessOpenFeignClient;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import java.util.List;
/**
* @Description 运营端权限模块
* @Author yinzuomei
* @Date 2020/5/21 15:47
*/
//@Component
public class CommonOperAccessOpenFeignClientFallback implements CommonOperAccessOpenFeignClient {
@Override
public Result clearOperUserAccess() {
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "clearOperUserAccess");
}
@Override
public Result hasOperPermission(HasOperPermissionFormDTO form) {
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "hasOperPermission");
}
@Override
public Result<List<OperResouce>> getExamineResourceUrls() {
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "getExamineResourceUrls");
}
}

19
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallbackFactory.java

@ -0,0 +1,19 @@
package com.epmet.commons.tools.feign.fallback;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.feign.CommonOperAccessOpenFeignClient;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class CommonOperAccessOpenFeignClientFallbackFactory implements FallbackFactory<CommonOperAccessOpenFeignClient> {
private CommonOperAccessOpenFeignClientFallback fallback = new CommonOperAccessOpenFeignClientFallback();
@Override
public CommonOperAccessOpenFeignClient create(Throwable cause) {
log.error(String.format("FeignClient调用发生异常,异常信息:%s", ExceptionUtils.getThrowableErrorStackTrace(cause)));
return fallback;
}
}

21
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -889,4 +889,25 @@ public class RedisKeys {
public static String getDingMiniInfoKey(String suiteKey) { public static String getDingMiniInfoKey(String suiteKey) {
return rootPrefix.concat("ding:miniInfo:" + suiteKey); return rootPrefix.concat("ding:miniInfo:" + suiteKey);
} }
/**
* 运营人员-资源权限
* @param operId
* @return
*/
public static String operResourcesBaseDir() {
return rootPrefix.concat("oper:access:resources:");
}
public static String operResourcesByUserId(String operId) {
return operResourcesBaseDir().concat(operId);
}
/**
* 获取需要检查的资源url
* @return
*/
public static String getOperExamineResourceUrls() {
return rootPrefix.concat("oper:access:examineresources");
}
} }

26
epmet-gateway/src/main/java/com/epmet/GatewayApplication.java

@ -8,9 +8,15 @@
package com.epmet; package com.epmet;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.aspect.ServletExceptionHandler; import com.epmet.commons.tools.aspect.ServletExceptionHandler;
import com.epmet.commons.tools.config.RedissonConfig; import com.epmet.commons.tools.config.RedissonConfig;
import com.epmet.commons.tools.config.ThreadDispatcherConfig; import com.epmet.commons.tools.config.ThreadDispatcherConfig;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.filter.CpProperty;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@ -18,6 +24,9 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.FilterType;
import javax.annotation.PostConstruct;
import java.util.List;
/** /**
* 网关服务 * 网关服务
* *
@ -31,7 +40,24 @@ import org.springframework.context.annotation.FilterType;
@ComponentScan(basePackages = {"com.epmet.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {RedissonConfig.class, ThreadDispatcherConfig.class, ServletExceptionHandler.class})) @ComponentScan(basePackages = {"com.epmet.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {RedissonConfig.class, ThreadDispatcherConfig.class, ServletExceptionHandler.class}))
public class GatewayApplication { public class GatewayApplication {
@Autowired
private CpProperty cpProperty;
@Autowired
private RedisUtils redisUtils;
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args); SpringApplication.run(GatewayApplication.class, args);
} }
/**
* 初始化运营端校验资源列表
*/
// @PostConstruct
// public void initOperExamineResources() {
// if (!redisUtils.hasKey(RedisKeys.getOperExamineResourceUrls())) {
// List<CpProperty.OperExamineResource> operExamineResourceUrls = cpProperty.getOperExamineResourceUrls();
// redisUtils.setString(RedisKeys.getOperExamineResourceUrls(), JSON.toJSONString(operExamineResourceUrls));
// }
// }
} }

70
epmet-gateway/src/main/java/com/epmet/auth/InternalAuthProcessor.java

@ -1,11 +1,22 @@
package com.epmet.auth; package com.epmet.auth;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.Constant; import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.dto.form.HasOperPermissionFormDTO;
import com.epmet.commons.tools.dto.result.OperResouce;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.CommonOperAccessOpenFeignClient;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.BaseTokenDto; import com.epmet.commons.tools.security.dto.BaseTokenDto;
import com.epmet.commons.tools.utils.CpUserDetailRedis; import com.epmet.commons.tools.utils.CpUserDetailRedis;
import com.epmet.commons.tools.utils.Result;
import com.epmet.filter.CpProperty; import com.epmet.filter.CpProperty;
import com.epmet.jwt.JwtTokenUtils; import com.epmet.jwt.JwtTokenUtils;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
@ -15,18 +26,20 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher; import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 内部认证处理器 * 内部认证处理器
*/ */
@Component @Component
public class InternalAuthProcessor extends AuthProcessor { public class InternalAuthProcessor extends AuthProcessor implements ResultDataResolver {
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
@ -41,6 +54,12 @@ public class InternalAuthProcessor extends AuthProcessor {
@Autowired @Autowired
private CpProperty cpProperty; private CpProperty cpProperty;
@Autowired
private CommonOperAccessOpenFeignClient operAccessOpenFeignClient;
@Autowired
private RedisUtils redisUtils;
@Override @Override
public ServerWebExchange auth(ServerWebExchange exchange, GatewayFilterChain chain) { public ServerWebExchange auth(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest(); ServerHttpRequest request = exchange.getRequest();
@ -104,10 +123,59 @@ public class InternalAuthProcessor extends AuthProcessor {
builder.header(AppClientConstant.CUSTOMER_ID, customerId); builder.header(AppClientConstant.CUSTOMER_ID, customerId);
} }
// 针对运营端的url拦截和校验
if (AppClientConstant.APP_OPER.equals(app)) {
HttpMethod method = request.getMethod();
Boolean hasAccess = checkRequestOperResource(userId, requestUri, method.toString());
if (!hasAccess) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "资源未授权", "资源未授权");
}
}
ServerHttpRequest shr = builder.build(); ServerHttpRequest shr = builder.build();
return exchange.mutate().request(shr).build(); return exchange.mutate().request(shr).build();
} }
/**
* 校验运营端用户是否有权访问该资源
* @param uri
* @param method
* @return
*/
private Boolean checkRequestOperResource(String userId, String uri, String method) {
String resourceJsonString = redisUtils.getString(RedisKeys.getOperExamineResourceUrls());
List<OperResouce> resources = JSON.parseObject(resourceJsonString, new TypeReference<List<OperResouce>>() {});
if (resources == null) {
// redis中没有缓存,需要api获取
resources = getResultDataOrThrowsException(operAccessOpenFeignClient.getExamineResourceUrls(), ServiceConstant.OPER_ACCESS_SERVER,
EpmetErrorCode.SERVER_ERROR.getCode(), "调用operaccess获取要校验的资源失败", "调用operaccess获取要校验的资源失败");
// 缓存
redisUtils.setString(RedisKeys.getOperExamineResourceUrls(), JSON.toJSONString(resources));
}
for (OperResouce resource : resources) {
if (antPathMatcher.match(resource.getResourceUrl(), uri)
&& resource.getResourceMethod().equals(method)) {
//需要校验权限的url
HasOperPermissionFormDTO form = new HasOperPermissionFormDTO();
form.setUri(uri);
form.setMethod(method);
form.setOperId(userId);
Result result = operAccessOpenFeignClient.hasOperPermission(form);
if (result == null || !result.success()) {
return false;
}
return true;
}
}
// 如果当前请求url不需要校验权限,那么返回true
return true;
}
/** /**
* 是否需要认证 * 是否需要认证
* @param requestUri * @param requestUri

11
epmet-gateway/src/main/java/com/epmet/filter/CpProperty.java

@ -42,4 +42,15 @@ public class CpProperty {
*/ */
private List<String> swaggerUrls; private List<String> swaggerUrls;
/**
* 运营端需要校验的url资源列表
*/
private List<OperExamineResource> operExamineResourceUrls;
@Data
public static class OperExamineResource {
private String resourceUrl;
private String resourceMethod;
}
} }

5
epmet-gateway/src/main/java/com/epmet/filter/EpmetGatewayFilter.java

@ -5,6 +5,7 @@ import com.epmet.auth.ExternalAuthProcessor;
import com.epmet.auth.InternalAuthProcessor; import com.epmet.auth.InternalAuthProcessor;
import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.IpUtils; import com.epmet.commons.tools.utils.IpUtils;
@ -64,6 +65,10 @@ public class EpmetGatewayFilter implements GatewayFilter {
} }
return doFilter(exchange, chain); return doFilter(exchange, chain);
} catch (EpmetException re) {
// 人为抛出,则携带错误码和错误信息响应给前端
log.error("EpmetGatewayFilter认证出错RenException,错误信息:{}", ExceptionUtils.getErrorStackTrace(re));
return response(exchange, new Result<>().error(re.getCode(), re.getMessage()));
} catch (RenException re) { } catch (RenException re) {
// 人为抛出,则携带错误码和错误信息响应给前端 // 人为抛出,则携带错误码和错误信息响应给前端
log.error("EpmetGatewayFilter认证出错RenException,错误信息:{}", ExceptionUtils.getErrorStackTrace(re)); log.error("EpmetGatewayFilter认证出错RenException,错误信息:{}", ExceptionUtils.getErrorStackTrace(re));

5
epmet-gateway/src/main/resources/bootstrap-urls.yml

@ -0,0 +1,5 @@
epmet:
oper-examine-resource-urls:
# 角色编辑
- resourceUrl: /oper/access/operrole
resourceMethod: PUT

1
epmet-gateway/src/main/resources/bootstrap.yml

@ -12,6 +12,7 @@ spring:
name: epmet-gateway-server name: epmet-gateway-server
#环境 dev|test|prod #环境 dev|test|prod
profiles: profiles:
include: urls
active: @spring.profiles.active@ active: @spring.profiles.active@
messages: messages:
encoding: UTF-8 encoding: UTF-8

4
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/dto/result/UploadImgResultDTO.java

@ -13,6 +13,10 @@ import java.io.Serializable;
@Data @Data
public class UploadImgResultDTO implements Serializable { public class UploadImgResultDTO implements Serializable {
private String url; private String url;
/**
* 原始文件名
*/
private String fileName;
/** /**
* 域名 * 域名
*/ */

1
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java

@ -279,6 +279,7 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
UploadImgResultDTO dto = new UploadImgResultDTO(); UploadImgResultDTO dto = new UploadImgResultDTO();
dto.setUrl(url); dto.setUrl(url);
dto.setDomain(ossDomain); dto.setDomain(ossDomain);
dto.setFileName(file.getOriginalFilename());
return new Result<UploadImgResultDTO>().ok(dto); return new Result<UploadImgResultDTO>().ok(dto);
} }

24
epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/form/HasOperPermissionFormDTO.java

@ -0,0 +1,24 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class HasOperPermissionFormDTO {
/**
* uri
*/
@NotBlank(message = "uri不能为空")
private String uri;
/**
* http方法
*/
@NotBlank(message = "请求http方法不能为空")
private String method;
@NotBlank(message = "操作者ID不能为空")
private String operId;
}

13
epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/result/OperResouce.java

@ -0,0 +1,13 @@
package com.epmet.dto.result;
import lombok.Data;
@Data
public class OperResouce {
private String userId;
private String resourceUrl;
private String ResourceMethod;
}

17
epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/OperAccessOpenFeignClient.java

@ -2,9 +2,12 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.feign.fallback.OperAccessOpenFeignClientFallbackFactory; import com.epmet.feign.fallback.OperAccessOpenFeignClientFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/** /**
* @Description 运营端权限模块 * @Description 运营端权限模块
@ -23,4 +26,18 @@ public interface OperAccessOpenFeignClient {
**/ **/
@GetMapping("/oper/access/menu/clearoperuseraccess") @GetMapping("/oper/access/menu/clearoperuseraccess")
Result clearOperUserAccess(); Result clearOperUserAccess();
/**
* 是否有该接口的权限
* @return
*/
@PostMapping("/oper/access/menu/hasPermission")
Result hasOperPermission(@RequestBody HasOperPermissionFormDTO form);
/**
* 需要验证的菜单资源
* @return
*/
@PostMapping("/oper/access/menu/getExamineResourceUrls")
Result getExamineResourceUrls();
} }

11
epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/fallback/OperAccessOpenFeignClientFallback.java

@ -3,6 +3,7 @@ package com.epmet.feign.fallback;
import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.feign.OperAccessOpenFeignClient; import com.epmet.feign.OperAccessOpenFeignClient;
/** /**
@ -17,5 +18,15 @@ public class OperAccessOpenFeignClientFallback implements OperAccessOpenFeignCli
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "clearOperUserAccess"); return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "clearOperUserAccess");
} }
@Override
public Result hasOperPermission(HasOperPermissionFormDTO form) {
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "hasOperPermission");
}
@Override
public Result getExamineResourceUrls() {
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "getExamineResourceUrls");
}
} }

39
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java

@ -1,9 +1,11 @@
package com.epmet.controller; package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.ErrorCode; import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.AssertUtils;
@ -12,7 +14,9 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.OperMenuDTO; import com.epmet.dto.OperMenuDTO;
import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.dto.result.MenuResourceDTO; import com.epmet.dto.result.MenuResourceDTO;
import com.epmet.dto.result.OperResouce;
import com.epmet.excel.OperMenuExcel; import com.epmet.excel.OperMenuExcel;
import com.epmet.service.OperMenuService; import com.epmet.service.OperMenuService;
import com.epmet.service.OperResourceService; import com.epmet.service.OperResourceService;
@ -53,7 +57,7 @@ public class OperMenuController {
//菜单资源列表 //菜单资源列表
List<MenuResourceDTO> resourceList = operResourceService.getMenuResourceList(id); List<MenuResourceDTO> resourceList = operResourceService.getMenuResourceList(id);
data.setResourceList(resourceList);
return new Result<OperMenuDTO>().ok(data); return new Result<OperMenuDTO>().ok(data);
} }
@ -161,4 +165,37 @@ public class OperMenuController {
operMenuService.clearOperUserAccess(tokenDto.getApp(), tokenDto.getClient(), tokenDto.getUserId()); operMenuService.clearOperUserAccess(tokenDto.getApp(), tokenDto.getClient(), tokenDto.getUserId());
return new Result(); return new Result();
} }
/**
* 改运营人员是否有该接口的权限
* @return
*/
@PostMapping("hasPermission")
public Result hasOperPermission(@RequestBody HasOperPermissionFormDTO form) {
ValidatorUtils.validateEntity(form);
String uri = form.getUri();
String method = form.getMethod();
// if (!AppClientConstant.APP_OPER.equals(loginUserApp)) {
//// 只校验运营端,其他都返回true
// return new Result();
// }
Boolean isMathe = operMenuService.hasOperPermission(uri, method, form.getOperId());
if (isMathe){
return new Result();
} else {
return new Result().error();
}
}
/**
* 需要验证的菜单资源
* @return
*/
@PostMapping("getExamineResourceUrls")
public Result getExamineResourceUrls() {
List<OperResouce> resources = operMenuService.getExamineResourceUrls();
return new Result().ok(resources);
}
} }

5
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java

@ -9,6 +9,7 @@
package com.epmet.dao; package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.result.OperResouce;
import com.epmet.entity.OperMenuEntity; import com.epmet.entity.OperMenuEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -49,4 +50,8 @@ public interface OperMenuDao extends BaseDao<OperMenuEntity> {
* @param pid 父菜单ID * @param pid 父菜单ID
*/ */
List<OperMenuEntity> getListPid(String pid); List<OperMenuEntity> getListPid(String pid);
List<OperResouce> getOperResourcesByUserId(String operId);
List<OperResouce> getExamineResourceUrls();
} }

24
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java

@ -17,10 +17,13 @@
package com.epmet.redis; package com.epmet.redis;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.HttpContextUtils; import com.epmet.commons.tools.utils.HttpContextUtils;
import com.epmet.dto.OperMenuDTO; import com.epmet.dto.OperMenuDTO;
import com.epmet.dto.result.OperResouce;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -71,4 +74,25 @@ public class OperMenuRedis {
return (Set<String>)redisUtils.get(key); return (Set<String>)redisUtils.get(key);
} }
public List<OperResouce> getOperResourcesByUserId(String operId) {
String key = RedisKeys.operResourcesByUserId(operId);
String json = redisUtils.getString(key);
return JSON.parseObject(json, new TypeReference<List<OperResouce>>(){});
}
public void setOperResourcesByUserId(String operId, List<OperResouce> resouces) {
String key = RedisKeys.operResourcesByUserId(operId);
String jsonString = JSON.toJSONString(resouces);
redisUtils.setString(key, jsonString);
}
/**
* 运营端用户资源删除
* @param operId
* @param resouces
*/
public void deleteOperResourcesByUserId(String operId) {
String key = RedisKeys.operResourcesByUserId(operId);
redisUtils.delete(key);
}
} }

5
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.OperMenuDTO; import com.epmet.dto.OperMenuDTO;
import com.epmet.dto.result.OperResouce;
import com.epmet.entity.OperMenuEntity; import com.epmet.entity.OperMenuEntity;
import java.util.List; import java.util.List;
@ -141,4 +142,8 @@ public interface OperMenuService extends BaseService<OperMenuEntity> {
List<OperMenuDTO> getListPid(String pid); List<OperMenuDTO> getListPid(String pid);
void clearOperUserAccess(String app, String client, String userId); void clearOperUserAccess(String app, String client, String userId);
Boolean hasOperPermission(String uri, String method, String loginUserId);
List<OperResouce> getExamineResourceUrls();
} }

69
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java

@ -24,8 +24,11 @@ import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.enums.SuperAdminEnum; import com.epmet.commons.tools.enums.SuperAdminEnum;
import com.epmet.commons.tools.exception.ErrorCode; import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.HttpContextUtils; import com.epmet.commons.tools.utils.HttpContextUtils;
@ -34,6 +37,7 @@ import com.epmet.commons.tools.utils.TreeUtils;
import com.epmet.dao.OperMenuDao; import com.epmet.dao.OperMenuDao;
import com.epmet.dto.OperMenuDTO; import com.epmet.dto.OperMenuDTO;
import com.epmet.dto.OperUserDTO; import com.epmet.dto.OperUserDTO;
import com.epmet.dto.result.OperResouce;
import com.epmet.entity.OperMenuEntity; import com.epmet.entity.OperMenuEntity;
import com.epmet.enums.MenuTypeEnum; import com.epmet.enums.MenuTypeEnum;
import com.epmet.feign.EpmetUserFeignClient; import com.epmet.feign.EpmetUserFeignClient;
@ -48,6 +52,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.AntPathMatcher;
import java.util.*; import java.util.*;
@ -70,6 +75,10 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
private OperResourceService operResourceService; private OperResourceService operResourceService;
@Autowired @Autowired
private OperLanguageService operLanguageService; private OperLanguageService operLanguageService;
@Autowired
private RedisUtils redisUtils;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override @Override
public PageData<OperMenuDTO> page(Map<String, Object> params) { public PageData<OperMenuDTO> page(Map<String, Object> params) {
@ -112,6 +121,13 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
insert(entity); insert(entity);
saveLanguage(entity.getId(), "name", entity.getName()); saveLanguage(entity.getId(), "name", entity.getName());
try {
redisUtils.delete(RedisKeys.getOperExamineResourceUrls());
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
logger.error("保存菜单配置异常:{}", msg);
}
//保存菜单资源 //保存菜单资源
operResourceService.saveMenuResource(entity.getId(), entity.getName(), dto.getResourceList()); operResourceService.saveMenuResource(entity.getId(), entity.getName(), dto.getResourceList());
@ -133,6 +149,21 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
updateById(entity); updateById(entity);
saveLanguage(entity.getId(), "name", entity.getName()); saveLanguage(entity.getId(), "name", entity.getName());
try {
redisUtils.delete(RedisKeys.getOperExamineResourceUrls());
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
logger.error("修改菜单配置异常:{}", msg);
}
try {
redisUtils.deleteByPattern(RedisKeys.operResourcesBaseDir().concat("*"));
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
logger.error("修改菜单配置异常:{}", msg);
}
//更新菜单资源 //更新菜单资源
operResourceService.saveMenuResource(entity.getId(), entity.getName(), dto.getResourceList()); operResourceService.saveMenuResource(entity.getId(), entity.getName(), dto.getResourceList());
@ -150,6 +181,13 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(String id, TokenDto tokenDto) { public void delete(String id, TokenDto tokenDto) {
try {
redisUtils.delete(RedisKeys.getOperExamineResourceUrls());
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
logger.error("删除菜单配置异常:{}", msg);
}
//逻辑删除 //逻辑删除
baseDao.deleteBatchIds(Collections.singletonList(id)); baseDao.deleteBatchIds(Collections.singletonList(id));
//删除角色菜单关系 //删除角色菜单关系
@ -242,6 +280,9 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
public void clearOperUserAccess(String app, String client, String userId) { public void clearOperUserAccess(String app, String client, String userId) {
//清空当前用户,菜单导航、权限标识 //清空当前用户,菜单导航、权限标识
operMenuRedis.delete(userId, app, client); operMenuRedis.delete(userId, app, client);
// 根据用户id删除用户资源列表,后期可以跟deleteAccess合并起来,先为烟台的安全检测做。
operMenuRedis.deleteOperResourcesByUserId(userId);
logger.info(String.format("运营端用户退出系统%s,清空菜单、权限成功",userId)); logger.info(String.format("运营端用户退出系统%s,清空菜单、权限成功",userId));
} }
@ -249,4 +290,32 @@ public class OperMenuServiceImpl extends BaseServiceImpl<OperMenuDao, OperMenuEn
operLanguageService.saveOrUpdate("oper_menu", tableId, fieldName, fieldValue, HttpContextUtils.getLanguage()); operLanguageService.saveOrUpdate("oper_menu", tableId, fieldName, fieldValue, HttpContextUtils.getLanguage());
} }
@Override
public Boolean hasOperPermission(String uri, String method, String operId) {
List<OperResouce> resouces = operMenuRedis.getOperResourcesByUserId(operId);
if (resouces == null) {
resouces = baseDao.getOperResourcesByUserId(operId);
operMenuRedis.setOperResourcesByUserId(operId, resouces);
}
return pathMatcher(uri, method, resouces);
}
private boolean pathMatcher(String requestUri, String method, List<OperResouce> resources){
for (OperResouce resource : resources) {
String resourceUrl = resource.getResourceUrl();
String resourceMethod = resource.getResourceMethod();
// 路径匹配 && http方法 匹配
if(antPathMatcher.match(resourceUrl, requestUri) && resourceMethod.equals(method)){
return true;
}
}
return false;
}
@Override
public List<OperResouce> getExamineResourceUrls() {
return baseDao.getExamineResourceUrls();
}
} }

23
epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperRoleServiceImpl.java

@ -21,7 +21,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.OperRoleDao; import com.epmet.dao.OperRoleDao;
import com.epmet.dto.OperRoleDTO; import com.epmet.dto.OperRoleDTO;
@ -30,6 +33,7 @@ import com.epmet.redis.OperRoleRedis;
import com.epmet.service.OperRoleMenuService; import com.epmet.service.OperRoleMenuService;
import com.epmet.service.OperRoleService; import com.epmet.service.OperRoleService;
import com.epmet.service.OperRoleUserService; import com.epmet.service.OperRoleUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -46,6 +50,7 @@ import java.util.Map;
* @since v1.0.0 2020-03-18 * @since v1.0.0 2020-03-18
*/ */
@Service @Service
@Slf4j
public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEntity> implements OperRoleService { public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEntity> implements OperRoleService {
@Autowired @Autowired
@ -55,6 +60,9 @@ public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEn
@Autowired @Autowired
private OperRoleUserService operRoleUserService; private OperRoleUserService operRoleUserService;
@Autowired
private RedisUtils redisUtils;
@Override @Override
public PageData<OperRoleDTO> page(Map<String, Object> params) { public PageData<OperRoleDTO> page(Map<String, Object> params) {
IPage<OperRoleEntity> page = baseDao.selectPage( IPage<OperRoleEntity> page = baseDao.selectPage(
@ -93,6 +101,13 @@ public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEn
insert(entity); insert(entity);
//保存角色菜单关系 //保存角色菜单关系
OperRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); OperRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList());
try {
redisUtils.deleteByPattern(RedisKeys.operResourcesBaseDir().concat("*"));
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
log.error("新增运营角色信息配置异常:{}", msg);
}
} }
@Override @Override
@ -102,6 +117,13 @@ public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEn
updateById(entity); updateById(entity);
//保存角色菜单关系 //保存角色菜单关系
OperRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); OperRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList());
try {
redisUtils.deleteByPattern(RedisKeys.operResourcesBaseDir().concat("*"));
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
log.error("修改运营角色信息配置异常:{}", msg);
}
} }
@Override @Override
@ -113,6 +135,7 @@ public class OperRoleServiceImpl extends BaseServiceImpl<OperRoleDao, OperRoleEn
OperRoleMenuService.deleteByRoleIds(ids); OperRoleMenuService.deleteByRoleIds(ids);
operRoleUserService.deleteByRoleIds(ids); operRoleUserService.deleteByRoleIds(ids);
} }
} }

22
epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml

@ -27,8 +27,8 @@
select t3.*, (select lang.field_value from oper_language lang where lang.table_name='oper_menu' and lang.field_name='name' select t3.*, (select lang.field_value from oper_language lang where lang.table_name='oper_menu' and lang.field_name='name'
and lang.table_id=t3.id and lang.language=#{language}) as name from oper_role_user t1 and lang.table_id=t3.id and lang.language=#{language}) as name from oper_role_user t1
left join oper_role_menu t2 on (t1.role_id = t2.role_id AND t2.del_flag = 0) left join oper_role_menu t2 on (t1.role_id = t2.role_id AND t2.del_flag = 0)
left join oper_menu t3 on (t2.menu_id = t3.id and t3.del_flag = 0) left join oper_menu t3 on (t2.menu_id = t3.id)
where t1.user_id = #{userId} AND t1.del_flag = 0 where t1.user_id = #{userId} AND t1.del_flag = 0 and t3.del_flag = 0
<if test="type != null"> <if test="type != null">
and t3.type = #{type} and t3.type = #{type}
</if> </if>
@ -39,4 +39,22 @@
select * from oper_menu where del_flag = 0 and pid = #{value} select * from oper_menu where del_flag = 0 and pid = #{value}
</select> </select>
<select id="getOperResourcesByUserId" resultType="com.epmet.dto.result.OperResouce">
select ru.user_id
, res.resource_url
, res.resource_method
from oper_role_user ru
inner join oper_role_menu orm on (ru.role_id = orm.role_id and orm.DEL_FLAG = 0)
inner join oper_resource res on (orm.menu_id = res.resource_code and res.DEL_FLAG=0)
where ru.user_id = #{operId}
and ru.DEL_FLAG = 0
</select>
<!--需要验证的资源列表(配置给了菜单,并且没有被删除的资源列表)-->
<select id="getExamineResourceUrls" resultType="com.epmet.dto.result.OperResouce">
select distinct res.resource_url, res.resource_method
from oper_menu menu
inner join oper_resource res on (menu.id = res.resource_code and res.DEL_FLAG = 0)
where menu.DEL_FLAG = 0
</select>
</mapper> </mapper>

15
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/OperUserServiceImpl.java

@ -26,8 +26,11 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.enums.SuperAdminEnum; import com.epmet.commons.tools.enums.SuperAdminEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.password.PasswordUtils; import com.epmet.commons.tools.security.password.PasswordUtils;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
@ -39,6 +42,7 @@ import com.epmet.entity.UserEntity;
import com.epmet.feign.OperRoleUserFeignClient; import com.epmet.feign.OperRoleUserFeignClient;
import com.epmet.service.OperUserService; import com.epmet.service.OperUserService;
import com.epmet.service.UserService; import com.epmet.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -56,6 +60,7 @@ import java.util.Map;
* @since v1.0.0 2020-03-18 * @since v1.0.0 2020-03-18
*/ */
@Service @Service
@Slf4j
public class OperUserServiceImpl extends BaseServiceImpl<OperUserDao, OperUserEntity> implements OperUserService { public class OperUserServiceImpl extends BaseServiceImpl<OperUserDao, OperUserEntity> implements OperUserService {
@Autowired @Autowired
@ -64,6 +69,8 @@ public class OperUserServiceImpl extends BaseServiceImpl<OperUserDao, OperUserEn
private OperRoleUserFeignClient operRoleUserFeignClient; private OperRoleUserFeignClient operRoleUserFeignClient;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private RedisUtils redisUtils;
@Override @Override
public PageData<OperUserDTO> page(Map<String, Object> params) { public PageData<OperUserDTO> page(Map<String, Object> params) {
@ -132,6 +139,13 @@ public class OperUserServiceImpl extends BaseServiceImpl<OperUserDao, OperUserEn
//更新角色用户关系 //更新角色用户关系
operRoleUserFeignClient.saveOrUpdate(entity.getUserId(),dto.getRoleIdList()); operRoleUserFeignClient.saveOrUpdate(entity.getUserId(),dto.getRoleIdList());
try {
redisUtils.delete(RedisKeys.operResourcesByUserId(entity.getUserId()));
} catch (Exception e) {
String msg = ExceptionUtils.getErrorStackTrace(e);
log.error("删除运营人员信息配置异常:{}", msg);
}
} }
@Override @Override
@ -141,6 +155,7 @@ public class OperUserServiceImpl extends BaseServiceImpl<OperUserDao, OperUserEn
baseDao.deleteBatchIds(Arrays.asList(ids)); baseDao.deleteBatchIds(Arrays.asList(ids));
operRoleUserFeignClient.deleteByUserIds(ids); operRoleUserFeignClient.deleteByUserIds(ids);
} }
@Override @Override

Loading…
Cancel
Save