/**
|
* 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();
|
}
|
}
|