forked from github/dataease
refactor: 缓存清理注解改为异步处理,加快接口处理时间
This commit is contained in:
parent
107afad074
commit
31ba1baa31
@ -1,18 +1,13 @@
|
||||
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.model.AuthURD;
|
||||
import io.dataease.commons.utils.AopUtils;
|
||||
import io.dataease.commons.utils.AuthUtils;
|
||||
import io.dataease.commons.utils.CommonBeanFactory;
|
||||
import io.dataease.commons.utils.LogUtil;
|
||||
import io.dataease.listener.util.CacheUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import io.dataease.service.decatch.DeCatchProcess;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.annotation.AfterReturning;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
@ -20,9 +15,6 @@ import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Aspect
|
||||
@Component
|
||||
public class DeCleanerAnnotationHandler {
|
||||
@ -43,15 +35,16 @@ public class DeCleanerAnnotationHandler {
|
||||
paramValue = AopUtils.getParamValue(arg, key, 0);
|
||||
}
|
||||
|
||||
|
||||
switch (type.name()) {
|
||||
case "DATASOURCE":
|
||||
cleanDataSource(paramValue);
|
||||
catchProcess().cleanDataSource(paramValue);
|
||||
break;
|
||||
case "DATASET":
|
||||
cleanDataSet(paramValue);
|
||||
catchProcess().cleanDataSet(paramValue);
|
||||
break;
|
||||
default:
|
||||
cleanPanel(paramValue);
|
||||
catchProcess().cleanPanel(paramValue);
|
||||
break;
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
@ -60,78 +53,10 @@ public class DeCleanerAnnotationHandler {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void cleanCacheParent(String pid, String type) {
|
||||
if (StringUtils.isBlank(pid) || StringUtils.isBlank(type)) {
|
||||
return;
|
||||
}
|
||||
CurrentUserDto user = AuthUtils.getUser();
|
||||
List<String> resourceIds = AuthUtils.parentResources(pid.toString(), type);
|
||||
if (CollectionUtils.isEmpty(resourceIds))return;
|
||||
resourceIds.forEach(resourceId -> {
|
||||
AuthURD authURD = AuthUtils.authURDR(resourceId);
|
||||
Optional.ofNullable(authURD.getUserIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
CacheUtils.remove("user_"+type, "user" + id);
|
||||
});
|
||||
});
|
||||
Optional.ofNullable(authURD.getRoleIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
CacheUtils.remove("role_"+type, "role" + id);
|
||||
});
|
||||
});
|
||||
Optional.ofNullable(authURD.getDeptIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
List<String> depts = AuthUtils.getAuthModels(id.toString(), "dept", user.getUserId(), user.getIsAdmin());
|
||||
depts.forEach(deptId -> {
|
||||
CacheUtils.remove("dept_"+type, "dept" + deptId);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
public DeCatchProcess catchProcess() {
|
||||
return CommonBeanFactory.getBean(DeCatchProcess.class);
|
||||
}
|
||||
|
||||
public void cleanPanel(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "panel");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void cleanDataSet(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "dataset");
|
||||
});
|
||||
}
|
||||
|
||||
public void cleanDataSource(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "link");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,97 @@
|
||||
package io.dataease.service.decatch;
|
||||
|
||||
import io.dataease.auth.api.dto.CurrentUserDto;
|
||||
import io.dataease.commons.constants.AuthConstants;
|
||||
import io.dataease.commons.model.AuthURD;
|
||||
import io.dataease.commons.utils.AuthUtils;
|
||||
import io.dataease.listener.util.CacheUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Author: wangjiahao
|
||||
* Date: 2022/5/31
|
||||
* Description:
|
||||
*/
|
||||
@Service
|
||||
public class DeCatchProcess {
|
||||
|
||||
@Async("taskExecutor")
|
||||
public void cleanPanel(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "panel");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Async("taskExecutor")
|
||||
public void cleanDataSet(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "dataset");
|
||||
});
|
||||
}
|
||||
|
||||
@Async("taskExecutor")
|
||||
public void cleanDataSource(Object pid) {
|
||||
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());
|
||||
});
|
||||
|
||||
Optional.ofNullable(pid).ifPresent(resourceId -> {
|
||||
cleanCacheParent(resourceId.toString(), "link");
|
||||
});
|
||||
}
|
||||
|
||||
private void cleanCacheParent(String pid, String type) {
|
||||
if (StringUtils.isBlank(pid) || StringUtils.isBlank(type)) {
|
||||
return;
|
||||
}
|
||||
CurrentUserDto user = AuthUtils.getUser();
|
||||
List<String> resourceIds = AuthUtils.parentResources(pid.toString(), type);
|
||||
if (CollectionUtils.isEmpty(resourceIds))return;
|
||||
resourceIds.forEach(resourceId -> {
|
||||
AuthURD authURD = AuthUtils.authURDR(resourceId);
|
||||
Optional.ofNullable(authURD.getUserIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
CacheUtils.remove("user_"+type, "user" + id);
|
||||
});
|
||||
});
|
||||
Optional.ofNullable(authURD.getRoleIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
CacheUtils.remove("role_"+type, "role" + id);
|
||||
});
|
||||
});
|
||||
Optional.ofNullable(authURD.getDeptIds()).ifPresent(ids -> {
|
||||
ids.forEach(id -> {
|
||||
List<String> depts = AuthUtils.getAuthModels(id.toString(), "dept", user.getUserId(), user.getIsAdmin());
|
||||
depts.forEach(deptId -> {
|
||||
CacheUtils.remove("dept_"+type, "dept" + deptId);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user