From 58282ba274bfa5d82aa25d8c10633d64450a3e4b Mon Sep 17 00:00:00 2001
From: blackbian <1064330015@qq.com>
Date: Fri, 10 Nov 2023 19:02:40 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E5=92=8C=E6=93=8D=E4=BD=9C=E6=9D=83=E9=99=90=E5=AF=B9=E5=A4=96?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 38 +++---
.../rocketapi/config/RocketApiAutoConfig.java | 23 ++++
.../rocketapi/controller/ApiController.java | 37 +++++-
.../rocketapi/exception/GlobalException.java | 31 +++++
.../permission/api/ApiPermission.java | 20 ++++
.../permission/api/ApiPermissionAspect.java | 66 +++++++++++
.../permission/api/ApiPermissionClient.java | 38 ++++++
.../permission/api/IApiPermissionService.java | 22 ++++
.../permission/constant/DataConstant.java | 109 ++++++++++++++++++
.../datalist/DataListPermissionClient.java | 61 ++++++++++
.../datalist/IDataListPermissionService.java | 35 ++++++
.../rocketapi/service/ApiInfoService.java | 34 +++++-
.../rocketapi/service/DataSourceService.java | 13 +++
13 files changed, 507 insertions(+), 20 deletions(-)
create mode 100644 src/main/java/com/github/alenfive/rocketapi/exception/GlobalException.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermission.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionAspect.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionClient.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/api/IApiPermissionService.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/constant/DataConstant.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/datalist/DataListPermissionClient.java
create mode 100644 src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
diff --git a/pom.xml b/pom.xml
index a0a2bff..230ddbf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,6 +195,16 @@
3.0.4
provided
+
+
+
+ org.aspectj
+ aspectjrt
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
@@ -250,20 +260,20 @@
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 1.5
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/github/alenfive/rocketapi/config/RocketApiAutoConfig.java b/src/main/java/com/github/alenfive/rocketapi/config/RocketApiAutoConfig.java
index 2114ccf..32eae2e 100644
--- a/src/main/java/com/github/alenfive/rocketapi/config/RocketApiAutoConfig.java
+++ b/src/main/java/com/github/alenfive/rocketapi/config/RocketApiAutoConfig.java
@@ -7,6 +7,9 @@ import com.github.alenfive.rocketapi.datasource.DataSourceManager;
import com.github.alenfive.rocketapi.datasource.factory.*;
import com.github.alenfive.rocketapi.extend.*;
import com.github.alenfive.rocketapi.function.*;
+import com.github.alenfive.rocketapi.permission.api.ApiPermissionAspect;
+import com.github.alenfive.rocketapi.permission.api.ApiPermissionClient;
+import com.github.alenfive.rocketapi.permission.datalist.DataListPermissionClient;
import com.github.alenfive.rocketapi.script.GroovyScriptParse;
import com.github.alenfive.rocketapi.script.IScriptParse;
import com.github.alenfive.rocketapi.service.*;
@@ -294,4 +297,24 @@ public class RocketApiAutoConfig {
public IClusterNotify getClusterNotify(){
return new DefaultClusterNotify();
}
+
+ @Bean
+ @ConditionalOnMissingBean
+ public DataListPermissionClient getDataListPermissionClient(){
+ return new DataListPermissionClient();
+ }
+
+
+ @Bean
+ @ConditionalOnMissingBean
+ public ApiPermissionClient getApiPermissionClient(){
+ return new ApiPermissionClient();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public ApiPermissionAspect getApiPermissionAspect(){
+ return new ApiPermissionAspect();
+ }
+
}
diff --git a/src/main/java/com/github/alenfive/rocketapi/controller/ApiController.java b/src/main/java/com/github/alenfive/rocketapi/controller/ApiController.java
index 41be801..2b85164 100644
--- a/src/main/java/com/github/alenfive/rocketapi/controller/ApiController.java
+++ b/src/main/java/com/github/alenfive/rocketapi/controller/ApiController.java
@@ -9,6 +9,9 @@ import com.github.alenfive.rocketapi.extend.ApiInfoContent;
import com.github.alenfive.rocketapi.extend.IApiDocSync;
import com.github.alenfive.rocketapi.extend.IScriptEncrypt;
import com.github.alenfive.rocketapi.extend.IUserAuthorization;
+import com.github.alenfive.rocketapi.permission.api.ApiPermission;
+import com.github.alenfive.rocketapi.permission.constant.DataConstant;
+import com.github.alenfive.rocketapi.permission.datalist.DataListPermissionClient;
import com.github.alenfive.rocketapi.script.IScriptParse;
import com.github.alenfive.rocketapi.service.*;
import com.github.alenfive.rocketapi.utils.GenerateId;
@@ -89,6 +92,9 @@ public class ApiController {
@Autowired
private CompletionService completionService;
+ @Autowired
+ private DataListPermissionClient dataListPermissionClient;
+
/**
* LOAD API LIST
*/
@@ -106,6 +112,10 @@ public class ApiController {
return apiInfo;
}).collect(Collectors.toList());
+ if(dataListPermissionClient.hasPermissionService()){
+ List list = dataListPermissionClient.filterByPermission(result.stream().map(e->e.getId()).collect(Collectors.toList()), DataConstant.ListDataType.apilist);
+ result = result.stream().filter(e->list.indexOf(e.getId())>-1).collect(Collectors.toList());
+ }
return ApiResult.success(result);
}
@@ -146,6 +156,7 @@ public class ApiController {
* @param apiInfo
*/
@PostMapping("/api-info")
+ @ApiPermission(permissions = {DataConstant.ApiDataList.ADD})
public ApiResult saveOrUpdateApiInfo(@RequestBody ApiInfo apiInfo,HttpServletRequest request) {
String user = loginService.getUser(request);
@@ -164,7 +175,6 @@ public class ApiController {
}
String apiInfoId = apiInfoService.saveApiInfo(apiInfo);
-
return ApiResult.success(apiInfoId);
}catch (Exception e){
e.printStackTrace();
@@ -249,6 +259,7 @@ public class ApiController {
* @param apiInfo
*/
@DeleteMapping("/api-info")
+ @ApiPermission(permissions = {DataConstant.ApiDataList.DELETE})
public ApiResult deleteApiInfo(@RequestBody ApiInfo apiInfo,HttpServletRequest request){
String user = loginService.getUser(request);
if(StringUtils.isEmpty(user)){
@@ -512,9 +523,16 @@ public class ApiController {
*/
@GetMapping("/directory/list")
public ApiResult directoryList(){
- return ApiResult.success(apiInfoService.loadDirectoryList().stream()
+ List result = apiInfoService.loadDirectoryList().stream()
.sorted(Comparator.comparing(ApiDirectory::getName).thenComparing(ApiDirectory::getPath))
- .collect(Collectors.toList()));
+ .collect(Collectors.toList());
+ if(dataListPermissionClient.hasPermissionService()){
+ List list = dataListPermissionClient.filterByPermission(result.stream().map(e->e.getId()).collect(Collectors.toList()), DataConstant.ListDataType.dirlist);
+ result = result.stream().filter(e->list.indexOf(e.getId())>-1).collect(Collectors.toList());
+ }
+ return ApiResult.success(result);
+
+
}
/**
@@ -523,6 +541,7 @@ public class ApiController {
* @return
*/
@PostMapping("/directory")
+ @ApiPermission(permissions = {DataConstant.DirDataList.ADD})
public ApiResult saveDirectory(@RequestBody ApiDirectory directory,HttpServletRequest request){
String user = loginService.getUser(request);
if(StringUtils.isEmpty(user)){
@@ -543,6 +562,7 @@ public class ApiController {
* @return
*/
@DeleteMapping("/directory")
+ @ApiPermission(permissions = {DataConstant.DirDataList.DELETE})
public ApiResult removeDirectory(@RequestBody ApiDirectory directory,HttpServletRequest request){
String user = loginService.getUser(request);
if(StringUtils.isEmpty(user)){
@@ -591,6 +611,7 @@ public class ApiController {
* @return
*/
@PostMapping("/import")
+ @ApiPermission(permissions = {DataConstant.ApiDataList.ADD})
public ApiResult importApiInfo(MultipartFile file,Integer override,HttpServletRequest request){
String user = loginService.getUser(request);
@@ -639,8 +660,12 @@ public class ApiController {
@GetMapping("/db-config/list")
public ApiResult listDbConfig(){
try {
- List dbConfigs = dataSourceService.getDBConfig();
- return ApiResult.success(dbConfigs);
+ List result = dataSourceService.getDBConfig();
+ if(dataListPermissionClient.hasPermissionService()){
+ List list = dataListPermissionClient.filterByPermission(result.stream().map(e->e.getId()).collect(Collectors.toList()), DataConstant.ListDataType.apilist);
+ result = result.stream().filter(e->list.indexOf(e.getId())>-1).collect(Collectors.toList());
+ }
+ return ApiResult.success(result);
}catch (Exception e){
e.printStackTrace();
return ApiResult.fail(e.getMessage());
@@ -652,6 +677,7 @@ public class ApiController {
* @param config
*/
@PostMapping("/db-config")
+ @ApiPermission(permissions = {DataConstant.DataSourceList.ADD})
public ApiResult saveDBConfig(@RequestBody DBConfig config,HttpServletRequest request) {
String user = loginService.getUser(request);
@@ -673,6 +699,7 @@ public class ApiController {
* @param config
*/
@DeleteMapping("/db-config")
+ @ApiPermission(permissions = {DataConstant.DataSourceList.DELETE})
public ApiResult deleteDBConfig(@RequestBody DBConfig config,HttpServletRequest request) throws IOException {
String user = loginService.getUser(request);
diff --git a/src/main/java/com/github/alenfive/rocketapi/exception/GlobalException.java b/src/main/java/com/github/alenfive/rocketapi/exception/GlobalException.java
new file mode 100644
index 0000000..b72706c
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/exception/GlobalException.java
@@ -0,0 +1,31 @@
+package com.github.alenfive.rocketapi.exception;
+
+import lombok.Data;
+
+/**
+ * @author liuchengbiao
+ * @date 2020-06-12 16:11
+ */
+@Data
+public class GlobalException extends RuntimeException {
+
+ private int code = 500;
+
+ public GlobalException(String msg) {
+ super(msg);
+ }
+
+ public GlobalException(String msg, Throwable e) {
+ super(msg, e);
+ }
+
+ public GlobalException(String msg, int code) {
+ super(msg);
+ this.setCode(code);
+ }
+
+ public GlobalException(String msg, int code, Throwable e) {
+ super(msg, e);
+ this.setCode(code);
+ }
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermission.java b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermission.java
new file mode 100644
index 0000000..a878b2d
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermission.java
@@ -0,0 +1,20 @@
+package com.github.alenfive.rocketapi.permission.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author bxf
+ * @version 1.0
+ * @date 2023/11/10 10:51
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ApiPermission {
+
+ boolean required() default true;
+
+ String[] permissions() default {};
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionAspect.java b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionAspect.java
new file mode 100644
index 0000000..ce08f74
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionAspect.java
@@ -0,0 +1,66 @@
+package com.github.alenfive.rocketapi.permission.api;
+
+import com.github.alenfive.rocketapi.exception.GlobalException;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterThrowing;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+/**
+ * 接口权限校验切面
+ * @author bxf
+ * @version 1.0
+ * @date 2023/10/11 10:51
+ */
+@Slf4j
+@Aspect
+@Component("apiPermissionAspect")
+public class ApiPermissionAspect {
+ @Resource
+ private ApiPermissionClient permissionClient;
+
+ @Before("@annotation(apiPermission) || @within(apiPermission)")
+ public void doBefore(JoinPoint joinPoint, ApiPermission apiPermission) {
+ if (!permissionClient.hasPermissionService()) {
+ // 没有权限接口的实现类,不进行权限校验
+ return;
+ }
+ // 获取request
+ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+ // 判断方法所属的类是否标记了该注解
+ Class> targetClass = joinPoint.getTarget().getClass();
+ ApiPermission classAnnotation = targetClass.getAnnotation(ApiPermission.class);
+ boolean classRequired = (classAnnotation != null && classAnnotation.required());
+ // 判断方法是否标记了该注解
+ MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+ Method method = signature.getMethod();
+ ApiPermission methodAnnotation = method.getAnnotation(ApiPermission.class);
+ boolean methodRequired = (methodAnnotation != null && methodAnnotation.required());
+ // 判断是否需要登录权限,就近原则,方法上有优先方法上的,方法上没有则使用类上的
+ boolean required = methodRequired || classRequired;
+ if (required) {
+ // 获取权限
+ String[] permissions = methodAnnotation != null ? methodAnnotation.permissions() : classAnnotation.permissions();
+ // 校验权限
+ boolean verify = permissionClient.verifyApiPermission(request, permissions);
+ if (!verify) {
+ throw new GlobalException("权限不足");
+ }
+ }
+ }
+
+ @AfterThrowing(pointcut = "@annotation(apiPermission) || @within(apiPermission)")
+ public void doAfterThrowing(JoinPoint joinPoint, ApiPermission apiPermission) {
+ // 记录日志等操作
+ }
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionClient.java b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionClient.java
new file mode 100644
index 0000000..32ce109
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/api/ApiPermissionClient.java
@@ -0,0 +1,38 @@
+package com.github.alenfive.rocketapi.permission.api;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author bxf
+ * @version 1.0
+ * @date 2023/11/10 10:43
+ */
+@Component
+public class ApiPermissionClient {
+
+ @Autowired(required = false)
+ private IApiPermissionService apiPermissionService;
+
+ /**
+ * 是否有实现类
+ * @return
+ */
+ public boolean hasPermissionService() {
+ return apiPermissionService != null;
+ }
+
+ public boolean verifyApiPermission(HttpServletRequest request, String... permissions) {
+ boolean verify = true;
+ if (apiPermissionService != null) {
+ verify = apiPermissionService.verifyApiPermission(request, permissions);
+ }
+ return verify;
+ }
+
+
+
+
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/api/IApiPermissionService.java b/src/main/java/com/github/alenfive/rocketapi/permission/api/IApiPermissionService.java
new file mode 100644
index 0000000..7300b84
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/api/IApiPermissionService.java
@@ -0,0 +1,22 @@
+package com.github.alenfive.rocketapi.permission.api;
+
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author bxf
+ * @version 1.0
+ * @date 2023/11/10 10:38
+ */
+public interface IApiPermissionService {
+
+ /**
+ * 校验接口权限
+ * @param request 请求
+ * @param permission 权限列表
+ * @return 是否有权限访问
+ */
+ boolean verifyApiPermission(HttpServletRequest request, String... permission);
+
+
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/constant/DataConstant.java b/src/main/java/com/github/alenfive/rocketapi/permission/constant/DataConstant.java
new file mode 100644
index 0000000..197a4b5
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/constant/DataConstant.java
@@ -0,0 +1,109 @@
+package com.github.alenfive.rocketapi.permission.constant;
+
+/**
+ * @author bxf
+ * @version 1.0
+ * @date 2023/11/08 11:39
+ */
+public interface DataConstant {
+
+
+ interface ListDataType {
+ /**
+ * 数据集
+ */
+ String datasource = "1";
+ /**
+ * 列表
+ */
+ String apilist = "2";
+ /**
+ * 目录数据集
+ */
+ String dirlist = "3";
+
+ }
+ /**
+ * api接口
+ */
+ interface ApiDataList {
+
+ /**
+ * api的查询接口权限
+ */
+ String VIEW = "rocketapi:api:view";
+
+ /**
+ * api的添加接口权限
+ */
+ String ADD = "rocketapi:api:add";
+
+ /**
+ * api的编辑接口权限
+ */
+ String UPDATE = "rocketapi:api:update";
+
+
+ /**
+ * api的删除接口权限
+ */
+ String DELETE = "rocketapi:api:delete";
+
+ }
+ /**
+ * 数据源接口
+ */
+ interface DataSourceList {
+
+ /**
+ * 数据源的查询接口权限
+ */
+ String VIEW = "rocketapi:datasource:view";
+
+ /**
+ * 数据源的添加接口权限
+ */
+ String ADD = "rocketapi:datasource:add";
+
+ /**
+ * 数据源的编辑接口权限
+ */
+ String UPDATE = "rocketapi:datasource:update";
+
+
+ /**
+ * 数据源的删除接口权限
+ */
+ String DELETE = "rocketapi:datasource:delete";
+
+ }
+
+ /**
+ * 目录接口
+ */
+ interface DirDataList {
+
+ /**
+ * 目录的查询接口权限
+ */
+ String VIEW = "rocketapi:dir:view";
+
+ /**
+ * 目录的添加接口权限
+ */
+ String ADD = "rocketapi:dir:add";
+
+ /**
+ * 目录的编辑接口权限
+ */
+ String UPDATE = "rocketapi:dir:update";
+
+
+ /**
+ * 目录的删除接口权限
+ */
+ String DELETE = "rocketapi:dir:delete";
+
+ }
+
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/datalist/DataListPermissionClient.java b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/DataListPermissionClient.java
new file mode 100644
index 0000000..f47c2d5
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/DataListPermissionClient.java
@@ -0,0 +1,61 @@
+package com.github.alenfive.rocketapi.permission.datalist;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 数据权限处理
+ * @author bianxiongfeng
+ * @version 1.0
+ * @date 2023/11/10 9:41
+ */
+@Component
+public class DataListPermissionClient {
+
+
+ @Autowired(required = false)
+ private IDataListPermissionService permissionService;
+
+ /**
+ * 是否有实现类
+ * @return
+ */
+ public boolean hasPermissionService() {
+ return permissionService != null;
+ }
+
+ /**
+ * 根据权限过滤
+ * @param allId 全部的数据集id
+ * @return 当前用户有权限的数据集id
+ */
+ public List filterByPermission(List allId, String dataTypeList) {
+ if (permissionService != null) {
+ return permissionService.filterByPermission(allId, dataTypeList);
+ }
+ return allId;
+ }
+
+ /**
+ * 数据集新增后的权限处理
+ * @param id 新增的数据集id
+ */
+ public void addPermission(String dataTypeList,String ...id) {
+ if (permissionService != null) {
+ permissionService.addPermission(dataTypeList,id);
+ }
+ }
+
+ /**
+ * 数据集删除后的权限处理
+ * @param id 删除的数据集id
+ */
+ public void deletePermission(String dataTypeList,String ...id) {
+ if (permissionService != null) {
+ permissionService.deletePermission(dataTypeList,id);
+ }
+ }
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
new file mode 100644
index 0000000..972230b
--- /dev/null
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
@@ -0,0 +1,35 @@
+package com.github.alenfive.rocketapi.permission.datalist;
+
+import java.util.List;
+
+/**
+ * 数据集权限处理,可通过实现该接口来自定义权限处理逻辑
+ * @author hongyang
+ * @version 1.0
+ * @date 2023/7/3 9:18
+ */
+public interface IDataListPermissionService {
+
+
+ /**
+ * 根据权限过滤
+ * @param allId 全部的数据集id
+ * @param dataTypeList 数据集类型列表
+ * @return 当前用户有权限的数据集id
+ */
+ List filterByPermission(List allId, String dataTypeList);
+
+ /**
+ * 数据集新增后的权限处理
+ * @param id 新增的数据集id
+ */
+ void addPermission(String dataTypeList,String ...id);
+
+ /**
+ * 数据集删除后的权限处理
+ * @param id 删除的数据集id
+ */
+ void deletePermission(String dataTypeList,String ...id);
+
+
+}
diff --git a/src/main/java/com/github/alenfive/rocketapi/service/ApiInfoService.java b/src/main/java/com/github/alenfive/rocketapi/service/ApiInfoService.java
index 898e42c..2016e19 100644
--- a/src/main/java/com/github/alenfive/rocketapi/service/ApiInfoService.java
+++ b/src/main/java/com/github/alenfive/rocketapi/service/ApiInfoService.java
@@ -8,6 +8,8 @@ import com.github.alenfive.rocketapi.entity.vo.*;
import com.github.alenfive.rocketapi.extend.IApiInfoCache;
import com.github.alenfive.rocketapi.extend.IApiPager;
import com.github.alenfive.rocketapi.extend.IClusterNotify;
+import com.github.alenfive.rocketapi.permission.constant.DataConstant;
+import com.github.alenfive.rocketapi.permission.datalist.DataListPermissionClient;
import com.github.alenfive.rocketapi.utils.GenerateId;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +44,9 @@ public class ApiInfoService {
private IApiPager apiPager = new SysApiPager();
+ @Autowired
+ private DataListPermissionClient dataListPermissionClient;
+
@Transactional
public String saveApiInfo(ApiInfo apiInfo) throws Exception {
@@ -67,6 +72,10 @@ public class ApiInfoService {
apiInfo.setService(rocketApiProperties.getServiceName());
apiInfo.setId(GenerateId.get().toHexString());
dataSourceManager.getStoreApiDataSource().saveEntity(apiInfo);
+ //添加后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.addPermission(DataConstant.ListDataType.apilist,apiInfo.getId());
+ }
} else {
apiInfo.setType(dbInfo.getType());
apiInfo.setCreateTime(dbInfo.getCreateTime());
@@ -149,6 +158,10 @@ public class ApiInfoService {
//触发集群刷新
this.sendNotify(dbInfo,null);
+ //删除后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.deletePermission(DataConstant.ListDataType.apilist,apiInfo.getId());
+ }
}
@@ -199,6 +212,10 @@ public class ApiInfoService {
ApiDirectory dbDirectory = currDirectories.stream().filter(item -> item.getId().equals(directory.getId())).findFirst().orElse(null);
if (dbDirectory == null) {
dataSourceManager.getStoreApiDataSource().saveEntity(directory);
+ //添加后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.addPermission(DataConstant.ListDataType.dirlist,directory.getId());
+ }
} else {
dataSourceManager.getStoreApiDataSource().updateEntityById(directory);
}
@@ -218,6 +235,10 @@ public class ApiInfoService {
apiInfo.setCreateTime(sdf.format(new Date()));
apiInfo.setUpdateTime(sdf.format(new Date()));
dataSourceManager.getStoreApiDataSource().saveEntity(apiInfo);
+ //添加后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.addPermission(DataConstant.ListDataType.apilist,apiInfo.getId());
+ }
} else {
apiInfo.setUpdateTime(sdf.format(new Date()));
dataSourceManager.getStoreApiDataSource().updateEntityById(apiInfo);
@@ -347,12 +368,19 @@ public class ApiInfoService {
ApiDirectory dir = new ApiDirectory();
dir.setId(directoryId);
dataSourceManager.getStoreApiDataSource().removeEntityById(dir);
-
+ //删除后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.deletePermission(DataConstant.ListDataType.dirlist,dir.getId());
+ }
//目录下的api列表
List apiInfoList = apiInfoCache.getAll().stream().filter(item->directoryId.equals(item.getDirectoryId())).collect(Collectors.toList());
for (ApiInfo apiInfo : apiInfoList ){
deleteApiInfo(apiInfo);
+ //删除后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.deletePermission(DataConstant.ListDataType.apilist,apiInfo.getId());
+ }
}
}
@@ -371,6 +399,10 @@ public class ApiInfoService {
if (StringUtils.isEmpty(directory.getId())){
directory.setId(GenerateId.get().toHexString());
dataSourceManager.getStoreApiDataSource().saveEntity(directory);
+ //添加权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.addPermission(DataConstant.ListDataType.dirlist,directory.getId());
+ }
return;
}
diff --git a/src/main/java/com/github/alenfive/rocketapi/service/DataSourceService.java b/src/main/java/com/github/alenfive/rocketapi/service/DataSourceService.java
index 0d6ccda..9e9f854 100644
--- a/src/main/java/com/github/alenfive/rocketapi/service/DataSourceService.java
+++ b/src/main/java/com/github/alenfive/rocketapi/service/DataSourceService.java
@@ -12,6 +12,8 @@ import com.github.alenfive.rocketapi.entity.vo.NotifyEntity;
import com.github.alenfive.rocketapi.entity.vo.NotifyEventType;
import com.github.alenfive.rocketapi.entity.vo.RefreshDB;
import com.github.alenfive.rocketapi.extend.IClusterNotify;
+import com.github.alenfive.rocketapi.permission.constant.DataConstant;
+import com.github.alenfive.rocketapi.permission.datalist.DataListPermissionClient;
import com.github.alenfive.rocketapi.utils.GenerateId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@@ -43,6 +45,9 @@ public class DataSourceService {
@Lazy
private IClusterNotify clusterNotify;
+ @Autowired
+ private DataListPermissionClient dataListPermissionClient;
+
public List getDBConfig(){
List configList = dataSourceManager.getStoreApiDataSource().listByEntity(ApiConfig.builder().service(rocketApiProperties.getServiceName()).type(ConfigType.DB.name()).build());
return configList.stream().map(item-> {
@@ -77,6 +82,10 @@ public class DataSourceService {
//集群刷新
RefreshDB refreshDB = RefreshDB.builder().oldDBName(dbConfig.getName()).build();
clusterNotify.sendNotify(NotifyEntity.builder().eventType(NotifyEventType.RefreshDB).refreshDB(refreshDB).build());
+ //删除后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.deletePermission(DataConstant.ListDataType.datasource,dbConfig.getId());
+ }
}
private void assertDBConfigName(String dbName,String dbId) {
@@ -110,6 +119,10 @@ public class DataSourceService {
//加载新连接
loadDBConfig(dbConfig);
+ //添加后调用权限
+ if(dataListPermissionClient.hasPermissionService()){
+ dataListPermissionClient.addPermission(DataConstant.ListDataType.datasource,dbConfig.getId());
+ }
} else {
oldDBConfig = getDBConfigById(dbConfig.getId());
--
Gitee
From 7ad9d7acb8349aa68efc597ce1b7d1246419b409 Mon Sep 17 00:00:00 2001
From: blackbian <1064330015@qq.com>
Date: Fri, 10 Nov 2023 19:11:32 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E5=92=8C=E6=93=8D=E4=BD=9C=E6=9D=83=E9=99=90=E5=AF=B9=E5=A4=96?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../permission/datalist/IDataListPermissionService.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
index 972230b..6ff46d1 100644
--- a/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
+++ b/src/main/java/com/github/alenfive/rocketapi/permission/datalist/IDataListPermissionService.java
@@ -4,9 +4,9 @@ import java.util.List;
/**
* 数据集权限处理,可通过实现该接口来自定义权限处理逻辑
- * @author hongyang
+ * @author bxf
* @version 1.0
- * @date 2023/7/3 9:18
+ * @date 2023/11/10 9:18
*/
public interface IDataListPermissionService {
--
Gitee