| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * | 
|  * https://www.renren.io | 
|  * | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| package com.zt.core.aspect; | 
|   | 
| import com.zt.common.annotation.DataFilter; | 
| import com.zt.common.constant.Constant; | 
| import com.zt.common.db.query.DataScope; | 
| import com.zt.common.exception.ErrorCode; | 
| import com.zt.common.exception.RenException; | 
| import com.zt.core.context.User; | 
| import com.zt.core.context.UserContext; | 
| 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.aspectj.lang.reflect.MethodSignature; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.lang.reflect.Method; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * 数据过滤,切面处理类 | 
|  * | 
|  * @author Mark sunlightcs@gmail.com | 
|  */ | 
| @Aspect | 
| @Component("dataFilter") | 
| public class DataFilterAspect { | 
|   | 
|     @Pointcut("@annotation(com.zt.common.annotation.DataFilter)") | 
|     public void dataFilterCut() { | 
|   | 
|     } | 
|   | 
|     @Before("dataFilterCut()") | 
|     public void dataFilter(JoinPoint point) { | 
|         Object params = point.getArgs()[0]; | 
|         if (params != null && params instanceof Map) { | 
|             User user = UserContext.getUser(); | 
|   | 
|             // 如果是超级管理员,则不进行数据过滤 | 
|             if (user.isSuperAdmin()) { | 
|                 return; | 
|             } | 
|   | 
|             try { | 
|                 // 否则进行数据过滤 | 
|                 Map map = (Map) params; | 
|                 String sqlFilter = getSqlFilter(user, point); | 
|                 map.put(Constant.Q.SQL_FILTER, new DataScope(sqlFilter)); | 
|             } catch (Exception e) { | 
|   | 
|             } | 
|   | 
|             return; | 
|         } | 
|   | 
|         throw new RenException(ErrorCode.DATA_SCOPE_PARAMS_ERROR); | 
|     } | 
|   | 
|     /** | 
|      * 获取数据过滤的SQL | 
|      */ | 
|     private String getSqlFilter(User user, JoinPoint point) throws Exception { | 
|         MethodSignature signature = (MethodSignature) point.getSignature(); | 
|         Method method = point.getTarget().getClass() | 
|                 .getDeclaredMethod(signature.getName(), signature.getParameterTypes()); | 
|         DataFilter dataFilter = method.getAnnotation(DataFilter.class); | 
|   | 
|         // 获取表的别名 | 
|         // String tableAlias = dataFilter.tableAlias(); | 
|         // if(StringUtils.isNotBlank(tableAlias)){ | 
|         // tableAlias += "."; | 
|         // } | 
|   | 
|         StringBuilder sqlFilter = new StringBuilder(); | 
|         sqlFilter.append(" ("); | 
|         // | 
|         // //部门ID列表 | 
|         // List<Long> deptIds = user.getDeptIdList(); | 
|         // if(CollUtil.isNotEmpty(deptIds)){ | 
|         // sqlFilter.append(tableAlias).append(dataFilter.deptId()); | 
|         // | 
|         // sqlFilter.append(" in(").append(StringUtils.join(deptIds, | 
|         // ",")).append(")"); | 
|         // } | 
|         // | 
|         // //查询本人数据 | 
|         // if(CollUtil.isNotEmpty(deptIds)){ | 
|         // sqlFilter.append(" or "); | 
|         // } | 
|         // sqlFilter.append(tableAlias).append(dataFilter.userId()).append("=").append(user.getId()); | 
|         // | 
|         // sqlFilter.append(")"); | 
|   | 
|         return sqlFilter.toString(); | 
|     } | 
| } |