package com.ard.framework.aspectj;
|
|
import com.ard.common.annotation.DataScopePlus;
|
import com.ard.common.constant.UserConstants;
|
import com.ard.common.core.domain.entity.SysRole;
|
import com.ard.common.core.domain.entity.SysUser;
|
import com.ard.common.core.domain.model.LoginUser;
|
import com.ard.common.core.text.Convert;
|
import com.ard.common.utils.SecurityUtils;
|
import com.ard.common.utils.StringUtils;
|
import com.ard.framework.security.context.PermissionContextHolder;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import org.aspectj.lang.JoinPoint;
|
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Before;
|
import org.aspectj.lang.annotation.Pointcut;
|
import org.springframework.stereotype.Component;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Aspect
|
@Component
|
public class DataScopePlusAspect {
|
// /**
|
// * 全部数据权限
|
// */
|
// public static final String DATA_SCOPE_ALL = "1";
|
//
|
// /**
|
// * 自定数据权限
|
// */
|
// public static final String DATA_SCOPE_CUSTOM = "2";
|
//
|
// /**
|
// * 部门数据权限
|
// */
|
// public static final String DATA_SCOPE_DEPT = "3";
|
//
|
// /**
|
// * 部门及以下数据权限
|
// */
|
// public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
|
//
|
// /**
|
// * 仅本人数据权限
|
// */
|
// public static final String DATA_SCOPE_SELF = "5";
|
//
|
//
|
// @Pointcut("@annotation(com.ard.common.annotation.DataScopePlus)")
|
// public void dataScopePointcut() {
|
// }
|
//
|
// @Before("@annotation(controllerDataScopePlus)")
|
// public void doBefore(JoinPoint joinPoint, DataScopePlus controllerDataScopePlus) {
|
// handleDataScope(joinPoint, controllerDataScopePlus);
|
// }
|
//
|
// protected void handleDataScope(final JoinPoint joinPoint, DataScopePlus controllerDataScope) {
|
// // 获取当前用户
|
// LoginUser loginUser = SecurityUtils.getLoginUser();
|
// if (StringUtils.isNotNull(loginUser)) {
|
// SysUser currentUser = loginUser.getUser();
|
// if (currentUser != null && !currentUser.isAdmin()) {
|
// String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(),
|
// PermissionContextHolder.getContext());
|
// dataScopeFilter(joinPoint, currentUser, permission);
|
// }
|
// }
|
// }
|
//
|
// private void dataScopeFilter(JoinPoint joinPoint, SysUser user, String permission) {
|
// StringBuilder sqlString = new StringBuilder();
|
// List<String> conditions = new ArrayList<>();
|
// List<String> scopeCustomIds = new ArrayList<>();
|
//
|
// // 获取用户角色并遍历进行权限检查
|
// user.getRoles().forEach(role -> {
|
// if (DATA_SCOPE_CUSTOM.equals(role.getDataScope()) && StringUtils.equals(role.getStatus(),
|
// UserConstants.ROLE_NORMAL)) {
|
// if (StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) {
|
// scopeCustomIds.add(Convert.toStr(role.getRoleId()));
|
// }
|
// }
|
// });
|
//
|
// for (SysRole role : user.getRoles()) {
|
// String dataScope = role.getDataScope();
|
// if (conditions.contains(dataScope) || StringUtils.equals(role.getStatus(), UserConstants.ROLE_DISABLE)) {
|
// continue;
|
// }
|
//
|
// if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) {
|
// continue;
|
// }
|
//
|
// if (DATA_SCOPE_ALL.equals(dataScope)) {
|
// sqlString = new StringBuilder();
|
// conditions.add(dataScope);
|
// break;
|
// } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
|
// // 自定义数据权限
|
// if (scopeCustomIds.size() > 1) {
|
// sqlString.append(StringUtils.format(" OR dept_id IN (SELECT dept_id FROM sys_role_dept WHERE " +
|
// "role_id IN ({}) )", String.join(",", scopeCustomIds)));
|
// } else {
|
// sqlString.append(StringUtils.format(" OR dept_id IN (SELECT dept_id FROM sys_role_dept WHERE " +
|
// "role_id = {} )", role.getRoleId()));
|
// }
|
// } else if (DATA_SCOPE_DEPT.equals(dataScope)) {
|
// // 部门数据权限
|
// sqlString.append(StringUtils.format(" OR dept_id = {}", user.getDeptId()));
|
// } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
|
// // 部门及以下数据权限
|
// sqlString.append(StringUtils.format(" OR dept_id IN (SELECT dept_id FROM sys_dept WHERE dept_id = {} " +
|
// "OR find_in_set({}, ancestors))", user.getDeptId(), user.getDeptId()));
|
// } else if (DATA_SCOPE_SELF.equals(dataScope)) {
|
// // 仅本人数据权限
|
// sqlString.append(StringUtils.format(" OR user_id = {}", user.getUserId()));
|
// }
|
// conditions.add(dataScope);
|
// }
|
// QueryWrapper<?> queryWrapper = getQueryWrapper(joinPoint);
|
// if (StringUtils.isNotBlank(sqlString.toString())) {
|
// queryWrapper.apply(sqlString.substring(4));
|
// }
|
// }
|
//
|
// private QueryWrapper<?> getQueryWrapper(JoinPoint joinPoint) {
|
// Object[] args = joinPoint.getArgs();
|
// if (args != null && args.length > 0 && args[0] instanceof QueryWrapper) {
|
// return (QueryWrapper<?>) args[0];
|
// }
|
// return null;
|
// }
|
}
|