diff --git a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java
index 0f81215fe5..a8e1c75fb6 100644
--- a/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java
+++ b/epmet-admin/epmet-admin-server/src/main/java/com/epmet/controller/SysDictTypeController.java
@@ -8,6 +8,7 @@
package com.epmet.controller;
+import com.epmet.commons.tools.annotation.OperRequiredPermission;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
@@ -59,6 +60,7 @@ public class SysDictTypeController {
return new Result();
}
+ @OperRequiredPermission
@PutMapping
public Result update(@RequestBody SysDictTypeDTO dto){
//效验数据
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/OperRequiredPermission.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/OperRequiredPermission.java
new file mode 100644
index 0000000000..c526223053
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/OperRequiredPermission.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 http://www.renren.io
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.epmet.commons.tools.annotation;
+
+import com.epmet.commons.tools.enums.RequirePermissionEnum;
+
+import java.lang.annotation.*;
+
+/**
+ * 运营端-权限注解
+ * @Author wxz
+ * @Description
+ * @Date 2022/09/27 16:17
+ **/
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface OperRequiredPermission {
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/OperRequiredPermissionAspect.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/OperRequiredPermissionAspect.java
new file mode 100644
index 0000000000..21de15630a
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/OperRequiredPermissionAspect.java
@@ -0,0 +1,56 @@
+package com.epmet.commons.tools.aspect;
+
+import com.epmet.commons.tools.dto.form.HasOperPermissionFormDTO;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.commons.tools.feign.CommonOperAccessOpenFeignClient;
+import com.epmet.commons.tools.utils.Result;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Aspect
+@Component
+@Order(30)
+public class OperRequiredPermissionAspect {
+
+ @Autowired
+ private CommonOperAccessOpenFeignClient operAccessOpenFeignClient;
+
+ @Before("@annotation(com.epmet.commons.tools.annotation.OperRequiredPermission)")
+ public void proceed(JoinPoint pjp) throws Throwable {
+// MethodSignature signature = (MethodSignature) pjp.getSignature();
+ HttpServletRequest request = getRequest();
+
+ String url = request.getRequestURI().toString();
+ String method = request.getMethod();
+
+ HasOperPermissionFormDTO form = new HasOperPermissionFormDTO();
+ form.setUri(url);
+ form.setMethod(method);
+ Result result = operAccessOpenFeignClient.hasOperPermission(form);
+ if (result == null || !result.success()) {
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "资源未授权", "资源未授权");
+ }
+ }
+
+ /**
+ * 获取Request对象
+ *
+ * @return
+ */
+ private HttpServletRequest getRequest() {
+ RequestAttributes ra = RequestContextHolder.getRequestAttributes();
+ ServletRequestAttributes sra = (ServletRequestAttributes) ra;
+ return sra.getRequest();
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/HasOperPermissionFormDTO.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/HasOperPermissionFormDTO.java
new file mode 100644
index 0000000000..f2ab024566
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/form/HasOperPermissionFormDTO.java
@@ -0,0 +1,22 @@
+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;
+
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OperResouce.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/dto/result/OperResouce.java
new file mode 100644
index 0000000000..632f013746
--- /dev/null
+++ b/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;
+
+
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonOperAccessOpenFeignClient.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonOperAccessOpenFeignClient.java
new file mode 100644
index 0000000000..374a26aff5
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonOperAccessOpenFeignClient.java
@@ -0,0 +1,36 @@
+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.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;
+
+/**
+ * @Description 运营端权限模块
+ * @Author yinzuomei
+ * @Date 2020/5/21 15:17 本服务对外开放的API,其他服务通过引用此client调用该服务
+ */
+// , url = "http://localhost:8093"
+@FeignClient(name = ServiceConstant.OPER_ACCESS_SERVER, fallbackFactory = CommonOperAccessOpenFeignClientFallbackFactory.class)
+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);
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallback.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallback.java
new file mode 100644
index 0000000000..d6ce167496
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallback.java
@@ -0,0 +1,27 @@
+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.feign.CommonOperAccessOpenFeignClient;
+import com.epmet.commons.tools.utils.ModuleUtils;
+import com.epmet.commons.tools.utils.Result;
+
+/**
+ * @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");
+ }
+}
+
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallbackFactory.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/fallback/CommonOperAccessOpenFeignClientFallbackFactory.java
new file mode 100644
index 0000000000..d62f24900c
--- /dev/null
+++ b/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 {
+ private CommonOperAccessOpenFeignClientFallback fallback = new CommonOperAccessOpenFeignClientFallback();
+
+ @Override
+ public CommonOperAccessOpenFeignClient create(Throwable cause) {
+ log.error(String.format("FeignClient调用发生异常,异常信息:%s", ExceptionUtils.getThrowableErrorStackTrace(cause)));
+ return fallback;
+ }
+}
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
index ac55205beb..d31359f1dc 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
@@ -889,4 +889,13 @@ public class RedisKeys {
public static String getDingMiniInfoKey(String suiteKey) {
return rootPrefix.concat("ding:miniInfo:" + suiteKey);
}
+
+ /**
+ * 运营人员-资源权限
+ * @param operId
+ * @return
+ */
+ public static String operResourcesByUserId(String operId) {
+ return rootPrefix.concat("oper:access:resources:").concat(operId);
+ }
}
diff --git a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/form/HasOperPermissionFormDTO.java b/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/form/HasOperPermissionFormDTO.java
new file mode 100644
index 0000000000..9a8197cd9e
--- /dev/null
+++ b/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/form/HasOperPermissionFormDTO.java
@@ -0,0 +1,22 @@
+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;
+
+}
diff --git a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/result/OperResouce.java b/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/dto/result/OperResouce.java
new file mode 100644
index 0000000000..5867da40ef
--- /dev/null
+++ b/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;
+
+
+}
diff --git a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/OperAccessOpenFeignClient.java b/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/OperAccessOpenFeignClient.java
index 9e5a1b0771..01101e83ca 100644
--- a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/OperAccessOpenFeignClient.java
+++ b/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.utils.Result;
+import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.feign.fallback.OperAccessOpenFeignClientFallbackFactory;
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;
/**
* @Description 运营端权限模块
@@ -23,4 +26,11 @@ public interface OperAccessOpenFeignClient {
**/
@GetMapping("/oper/access/menu/clearoperuseraccess")
Result clearOperUserAccess();
+
+ /**
+ * 是否有该接口的权限
+ * @return
+ */
+ @PostMapping("/oper/access/menu/hasPermission")
+ Result hasOperPermission(@RequestBody HasOperPermissionFormDTO form);
}
diff --git a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/fallback/OperAccessOpenFeignClientFallback.java b/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/fallback/OperAccessOpenFeignClientFallback.java
index 46c4b182eb..c6e275097c 100644
--- a/epmet-module/oper-access/oper-access-client/src/main/java/com/epmet/feign/fallback/OperAccessOpenFeignClientFallback.java
+++ b/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.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
+import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.feign.OperAccessOpenFeignClient;
/**
@@ -17,5 +18,10 @@ public class OperAccessOpenFeignClientFallback implements OperAccessOpenFeignCli
return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "clearOperUserAccess");
}
+
+ @Override
+ public Result hasOperPermission(HasOperPermissionFormDTO form) {
+ return ModuleUtils.feignConError(ServiceConstant.OPER_ACCESS_SERVER, "hasOperPermission");
+ }
}
diff --git a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java
index 63fc7d61df..73a54ba654 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java
+++ b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/controller/OperMenuController.java
@@ -1,9 +1,12 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.annotation.OperRequiredPermission;
+import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.ErrorCode;
import com.epmet.commons.tools.page.PageData;
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.Result;
import com.epmet.commons.tools.validator.AssertUtils;
@@ -12,6 +15,7 @@ import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.OperMenuDTO;
+import com.epmet.dto.form.HasOperPermissionFormDTO;
import com.epmet.dto.result.MenuResourceDTO;
import com.epmet.excel.OperMenuExcel;
import com.epmet.service.OperMenuService;
@@ -53,7 +57,7 @@ public class OperMenuController {
//菜单资源列表
List resourceList = operResourceService.getMenuResourceList(id);
-
+ data.setResourceList(resourceList);
return new Result().ok(data);
}
@@ -161,4 +165,30 @@ public class OperMenuController {
operMenuService.clearOperUserAccess(tokenDto.getApp(), tokenDto.getClient(), tokenDto.getUserId());
return new Result();
}
+
+ /**
+ * 是否有该接口的权限
+ * @return
+ */
+ @PostMapping("hasPermission")
+ public Result hasOperPermission(@RequestBody HasOperPermissionFormDTO form) {
+ ValidatorUtils.validateEntity(form);
+ String uri = form.getUri();
+ String method = form.getMethod();
+
+ String loginUserApp = EpmetRequestHolder.getLoginUserApp();
+ String loginUserId = EpmetRequestHolder.getLoginUserId();
+
+ if (!AppClientConstant.APP_OPER.equals(loginUserApp)) {
+// 只校验运营端,其他都返回true
+ return new Result();
+ }
+
+ Boolean isMathe = operMenuService.hasOperPermission(uri, method, loginUserId);
+ if (isMathe){
+ return new Result();
+ } else {
+ return new Result().error();
+ }
+ }
}
diff --git a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java
index 2858a76f24..22ecf34695 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java
+++ b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/dao/OperMenuDao.java
@@ -9,6 +9,7 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.dto.result.OperResouce;
import com.epmet.entity.OperMenuEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -49,4 +50,6 @@ public interface OperMenuDao extends BaseDao {
* @param pid 父菜单ID
*/
List getListPid(String pid);
+
+ List getOperResourcesByUserId(String operId);
}
diff --git a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java
index f1b568f33a..9121d631e9 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java
+++ b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/redis/OperMenuRedis.java
@@ -17,10 +17,13 @@
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.RedisUtils;
import com.epmet.commons.tools.utils.HttpContextUtils;
import com.epmet.dto.OperMenuDTO;
+import com.epmet.dto.result.OperResouce;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -71,4 +74,25 @@ public class OperMenuRedis {
return (Set)redisUtils.get(key);
}
+ public List getOperResourcesByUserId(String operId) {
+ String key = RedisKeys.operResourcesByUserId(operId);
+ String json = (String) redisUtils.get(key);
+ return JSON.parseObject(json, new TypeReference>(){});
+ }
+
+ public void setOperResourcesByUserId(String operId, List resouces) {
+ String key = RedisKeys.operResourcesByUserId(operId);
+ String jsonString = JSON.toJSONString(resouces);
+ redisUtils.set(key, jsonString);
+ }
+
+ /**
+ * 运营端用户资源删除
+ * @param operId
+ * @param resouces
+ */
+ public void deleteOperResourcesByUserId(String operId) {
+ String key = RedisKeys.operResourcesByUserId(operId);
+ redisUtils.delete(key);
+ }
}
\ No newline at end of file
diff --git a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java
index 54e3a58067..670d972455 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java
+++ b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/OperMenuService.java
@@ -141,4 +141,6 @@ public interface OperMenuService extends BaseService {
List getListPid(String pid);
void clearOperUserAccess(String app, String client, String userId);
+
+ Boolean hasOperPermission(String uri, String method, String loginUserId);
}
diff --git a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java
index d83970486c..f2dea5642e 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java
+++ b/epmet-module/oper-access/oper-access-server/src/main/java/com/epmet/service/impl/OperMenuServiceImpl.java
@@ -34,6 +34,7 @@ import com.epmet.commons.tools.utils.TreeUtils;
import com.epmet.dao.OperMenuDao;
import com.epmet.dto.OperMenuDTO;
import com.epmet.dto.OperUserDTO;
+import com.epmet.dto.result.OperResouce;
import com.epmet.entity.OperMenuEntity;
import com.epmet.enums.MenuTypeEnum;
import com.epmet.feign.EpmetUserFeignClient;
@@ -48,6 +49,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.AntPathMatcher;
import java.util.*;
@@ -71,6 +73,8 @@ public class OperMenuServiceImpl extends BaseServiceImpl page(Map params) {
IPage page = baseDao.selectPage(
@@ -242,6 +246,9 @@ public class OperMenuServiceImpl extends BaseServiceImpl 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 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;
+ }
}
diff --git a/epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml b/epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml
index e3a61dbd36..dd44c0b389 100644
--- a/epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml
+++ b/epmet-module/oper-access/oper-access-server/src/main/resources/mapper/OperMenuDao.xml
@@ -39,4 +39,15 @@
select * from oper_menu where del_flag = 0 and pid = #{value}
+
+ 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_menu m on (orm.menu_id = m.id and m.DEL_FLAG = 0 and m.type = 1)
+ 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
+