疯狂的狮子Li
2021-11-21 019526fbe921a574f76e629ad7b3079f933a630a
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -1,25 +1,20 @@
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.core.service.UserService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils;
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;
/**
@@ -61,29 +56,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,32 +122,18 @@
   }
   /**
    * 是否存在注解,如果存在就获取
    */
   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);