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