疯狂的狮子li
2021-12-24 5ca038d888922e93bf45c7bd37f3c6dce849dcff
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -1,34 +1,28 @@
package com.ruoyi.framework.aspectj;
import cn.hutool.core.lang.Validator;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.web.service.TokenService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Map;
/**
 * 数据过滤处理
 *
 * @author Lion Li
 * @deprecated 3.6.0 移除 {@link com.ruoyi.framework.handler.PlusDataPermissionHandler}
 */
@Aspect
@Component
@Deprecated
public class DataScopeAspect {
   /**
@@ -61,29 +55,19 @@
    */
   public static final String DATA_SCOPE = "dataScope";
   // 配置织入点
   @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
   public void dataScopePointCut() {
   }
   @Before("dataScopePointCut()")
   public void doBefore(JoinPoint point) throws Throwable {
   @Before("@annotation(controllerDataScope)")
   public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable {
      clearDataScope(point);
      handleDataScope(point);
      handleDataScope(point, controllerDataScope);
   }
   protected void handleDataScope(final JoinPoint joinPoint) {
      // 获得注解
      DataScope controllerDataScope = getAnnotationLog(joinPoint);
      if (controllerDataScope == null) {
         return;
      }
   protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) {
      // 获取当前的用户
      LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
      if (Validator.isNotNull(loginUser)) {
         SysUser currentUser = loginUser.getUser();
         // 如果是超级管理员,则不过滤数据
         if (Validator.isNotNull(currentUser) && !currentUser.isAdmin()) {
      LoginUser loginUser = SecurityUtils.getLoginUser();
      if (StringUtils.isNotNull(loginUser)) {
         SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
            // 如果是超级管理员,则不过滤数据
         if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) {
            dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
               controllerDataScope.userAlias(), controllerDataScope.isUser());
         }
@@ -137,38 +121,21 @@
   }
   /**
    * 是否存在注解,如果存在就获取
    */
   private DataScope getAnnotationLog(JoinPoint joinPoint) {
      Signature signature = joinPoint.getSignature();
      MethodSignature methodSignature = (MethodSignature) signature;
      Method method = methodSignature.getMethod();
      if (method != null) {
         return method.getAnnotation(DataScope.class);
      }
      return null;
   }
   /**
    * 拼接权限sql前先清空params.dataScope参数防止注入
    */
   private void clearDataScope(final JoinPoint joinPoint) {
      Object params = joinPoint.getArgs()[0];
      if (Validator.isNotNull(params)) {
      if (StringUtils.isNotNull(params)) {
         putDataScope(joinPoint, "");
      }
   }
   private static void putDataScope(JoinPoint joinPoint, String sql) {
      Object params = joinPoint.getArgs()[0];
      if (Validator.isNotNull(params)) {
      if (StringUtils.isNotNull(params)) {
         if (params instanceof BaseEntity) {
            BaseEntity baseEntity = (BaseEntity) params;
            baseEntity.getParams().put(DATA_SCOPE, sql);
         } else {
            Map<String, Object> invoke = ReflectUtils.invokeGetter(params, "params");
            invoke.put(DATA_SCOPE, sql);
         }
      }
   }