From f6bfccdb2464ba9323b94b3bf34f21e041c2e3bd Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 14 Feb 2022 11:56:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=B0=E5=BB=BA=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=B8=80=E8=87=B4=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/auth/annotation/DeCleaner.java | 14 ++++ .../auth/aop/DeCleanerAnnotationHandler.java | 74 +++++++++++++++++++ .../auth/service/impl/ExtAuthServiceImpl.java | 6 ++ .../service/dataset/DataSetGroupService.java | 3 + .../service/datasource/DatasourceService.java | 3 + .../service/panel/PanelGroupService.java | 3 + 6 files changed, 103 insertions(+) create mode 100644 backend/src/main/java/io/dataease/auth/annotation/DeCleaner.java create mode 100644 backend/src/main/java/io/dataease/auth/aop/DeCleanerAnnotationHandler.java diff --git a/backend/src/main/java/io/dataease/auth/annotation/DeCleaner.java b/backend/src/main/java/io/dataease/auth/annotation/DeCleaner.java new file mode 100644 index 0000000000..40f9c57c26 --- /dev/null +++ b/backend/src/main/java/io/dataease/auth/annotation/DeCleaner.java @@ -0,0 +1,14 @@ +package io.dataease.auth.annotation; + +import io.dataease.commons.constants.DePermissionType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface DeCleaner { + DePermissionType value(); +} diff --git a/backend/src/main/java/io/dataease/auth/aop/DeCleanerAnnotationHandler.java b/backend/src/main/java/io/dataease/auth/aop/DeCleanerAnnotationHandler.java new file mode 100644 index 0000000000..276d43b1ca --- /dev/null +++ b/backend/src/main/java/io/dataease/auth/aop/DeCleanerAnnotationHandler.java @@ -0,0 +1,74 @@ +package io.dataease.auth.aop; + + +import io.dataease.auth.annotation.DeCleaner; +import io.dataease.auth.api.dto.CurrentUserDto; +import io.dataease.commons.constants.AuthConstants; +import io.dataease.commons.constants.DePermissionType; +import io.dataease.commons.utils.AuthUtils; +import io.dataease.commons.utils.LogUtil; +import io.dataease.listener.util.CacheUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +public class DeCleanerAnnotationHandler { + + @Around(value = "@annotation(io.dataease.auth.annotation.DeCleaner)") + public Object CleanerAround(ProceedingJoinPoint point) { + try { + CurrentUserDto user = AuthUtils.getUser(); + MethodSignature ms = (MethodSignature) point.getSignature(); + Method method = ms.getMethod(); + DeCleaner deCleaner = method.getAnnotation(DeCleaner.class); + DePermissionType type = deCleaner.value(); + switch (type.name()) { + case "DATASOURCE": + cleanDataSource(); + break; + case "DATASET": + cleanDataSet(); + break; + default: + cleanPanel(); + break; + } + return point.proceed(point.getArgs()); + + }catch (Throwable e) { + LogUtil.error(e.getMessage(), e); + throw new RuntimeException(e); + } + } + + public void cleanPanel() { + CurrentUserDto user = AuthUtils.getUser(); + CacheUtils.remove(AuthConstants.USER_PANEL_NAME, "user" + user.getUserId()); + CacheUtils.remove(AuthConstants.DEPT_PANEL_NAME, "dept" + user.getDeptId()); + user.getRoles().forEach(role -> { + CacheUtils.remove(AuthConstants.ROLE_PANEL_NAME, "role" + role.getId()); + }); + } + public void cleanDataSet() { + CurrentUserDto user = AuthUtils.getUser(); + CacheUtils.remove(AuthConstants.USER_DATASET_NAME, "user" + user.getUserId()); + CacheUtils.remove(AuthConstants.DEPT_DATASET_NAME, "dept" + user.getDeptId()); + user.getRoles().forEach(role -> { + CacheUtils.remove(AuthConstants.ROLE_DATASET_NAME, "role" + role.getId()); + }); + } + public void cleanDataSource() { + CurrentUserDto user = AuthUtils.getUser(); + CacheUtils.remove(AuthConstants.USER_LINK_NAME, "user" + user.getUserId()); + CacheUtils.remove(AuthConstants.DEPT_LINK_NAME, "dept" + user.getDeptId()); + user.getRoles().forEach(role -> { + CacheUtils.remove(AuthConstants.ROLE_LINK_NAME, "role" + role.getId()); + }); + } +} diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ExtAuthServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ExtAuthServiceImpl.java index f900cd4bc1..3828fbe35a 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ExtAuthServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ExtAuthServiceImpl.java @@ -1,12 +1,15 @@ package io.dataease.auth.service.impl; +import io.dataease.auth.api.dto.CurrentUserDto; import io.dataease.auth.entity.AuthItem; import io.dataease.auth.service.ExtAuthService; import io.dataease.base.domain.SysAuth; import io.dataease.base.mapper.ext.ExtAuthMapper; import io.dataease.commons.constants.AuthConstants; import io.dataease.commons.model.AuthURD; +import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.LogUtil; +import io.dataease.listener.util.CacheUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -146,4 +149,7 @@ public class ExtAuthServiceImpl implements ExtAuthService { public void clearRoleResource(Long roleId) { LogUtil.info("all permission resource of role {} is cleanning...", roleId); } + + + } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index 2a5f04ec2f..a6b42f3038 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -1,9 +1,11 @@ package io.dataease.service.dataset; +import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.DatasetGroup; import io.dataease.base.domain.DatasetGroupExample; import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; +import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.TreeUtils; @@ -39,6 +41,7 @@ public class DataSetGroupService { @Resource private SysAuthService sysAuthService; + @DeCleaner(DePermissionType.DATASET) public DataSetGroupDTO save(DatasetGroup datasetGroup) { checkName(datasetGroup); if (StringUtils.isEmpty(datasetGroup.getId())) { diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index c709074ebf..de0b6e37de 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -2,10 +2,12 @@ package io.dataease.service.datasource; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; +import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.*; import io.dataease.base.mapper.*; import io.dataease.base.mapper.ext.ExtDataSourceMapper; import io.dataease.base.mapper.ext.query.GridExample; +import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.exception.DEException; import io.dataease.commons.model.AuthURD; import io.dataease.commons.utils.AuthUtils; @@ -51,6 +53,7 @@ public class DatasourceService { @Resource private CommonThreadPool commonThreadPool; + @DeCleaner(DePermissionType.DATASOURCE) public Datasource addDatasource(Datasource datasource) throws Exception{ checkName(datasource); long currentTimeMillis = System.currentTimeMillis(); diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index b063082e99..beba7b4fae 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -1,10 +1,12 @@ package io.dataease.service.panel; +import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.*; import io.dataease.base.mapper.ChartViewMapper; import io.dataease.base.mapper.PanelGroupMapper; import io.dataease.base.mapper.ext.ExtPanelGroupMapper; import io.dataease.base.mapper.ext.ExtPanelLinkJumpMapper; +import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.PanelConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.TreeUtils; @@ -75,6 +77,7 @@ public class PanelGroupService { return TreeUtils.mergeTree(panelGroupDTOList, "default_panel"); } + @DeCleaner(DePermissionType.PANEL) @Transactional public PanelGroup saveOrUpdate(PanelGroupRequest request) { try {