This commit is contained in:
2023-05-23 16:47:47 +08:00
parent f5aa6b2f69
commit 0ae1932f4c
6 changed files with 50 additions and 11 deletions

View File

@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil;
import com.qiaoba.auth.annotation.DataScope;
import com.qiaoba.auth.entity.LoginUser;
import com.qiaoba.auth.entity.dto.RoleDto;
import com.qiaoba.auth.utils.SecurityUtil;
import com.qiaoba.common.base.entity.DataScopeParam;
import com.qiaoba.common.base.utils.DatabaseUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@ -13,6 +15,7 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 数据过滤处理
@ -47,25 +50,32 @@ public class DataScopeAspect {
*/
public static final String DATA_SCOPE_SELF = "5";
/**
* 数据权限过滤关键字
*/
public static final String DATA_SCOPE = "dataScope";
@Before("@annotation(controllerDataScope)")
public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable {
LoginUser loginUser = SecurityUtil.getLoginUser();
if (Objects.isNull(loginUser)) {
return;
}
Object[] args = point.getArgs();
for (Object arg : args) {
if (Objects.nonNull(arg) && arg instanceof DataScopeParam) {
dataScopeFilter((DataScopeParam) arg, loginUser, controllerDataScope.deptAlias(), controllerDataScope.userAlias());
break;
}
}
}
/**
* 数据范围过滤
*
* @param joinPoint 切点
* @param param 入参
* @param user 用户
* @param deptAlias 部门别名
* @param userAlias 用户别名
*/
public static void dataScopeFilter(JoinPoint joinPoint, LoginUser user, String deptAlias, String userAlias) {
public static void dataScopeFilter(DataScopeParam param, LoginUser user, String deptAlias, String userAlias) {
StringBuilder sqlString = new StringBuilder();
List<String> conditions = new ArrayList<String>();
@ -104,6 +114,10 @@ public class DataScopeAspect {
if (CollUtil.isEmpty(conditions)) {
sqlString.append(StrUtil.format(" OR {}.dept_id = 0 ", deptAlias));
}
if (StrUtil.isNotBlank(sqlString)) {
param.setDataScope(" AND (" + sqlString.substring(4) + ")");
}
}
}