首页>代码>基于SpringBoot+freemarker实现的人事管理系统>/person_system/person-admin/src/main/java/com/person/common/aspect/DataFilterAspect.java
                
                /**
 * 
 *
 * 
 *
 * 
 */
package com.person.common.aspect;
import com.person.common.annotation.DataFilter;
import com.person.modules.sys.entity.SysUserEntity;
import com.person.modules.sys.service.SysDeptService;
import com.person.modules.sys.service.SysRoleDeptService;
import com.person.modules.sys.service.SysUserRoleService;
import com.person.modules.sys.shiro.ShiroUtils;
import com.person.common.exception.RRException;
import com.person.common.utils.Constant;
import org.apache.commons.lang.StringUtils;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
 * 数据过滤,切面处理类
 *
 * @author 
 */
@Aspect
@Component
public class DataFilterAspect {
    @Autowired
    private SysDeptService sysDeptService;
    @Autowired
    private SysUserRoleService sysUserRoleService;
    @Autowired
    private SysRoleDeptService sysRoleDeptService;
    @Pointcut("@annotation(com.person.common.annotation.DataFilter)")
    public void dataFilterCut() {
    }
    @Before("dataFilterCut()")
    public void dataFilter(JoinPoint point) throws Throwable {
        Object params = point.getArgs()[0];
        if(params != null && params instanceof Map){
            SysUserEntity user = ShiroUtils.getUserEntity();
            //如果不是超级管理员,则进行数据过滤
            if(user.getUserId() != Constant.SUPER_ADMIN){
                Map map = (Map)params;
                map.put(Constant.SQL_FILTER, getSQLFilter(user, point));
            }
            return ;
        }
        throw new RRException("数据权限接口,只能是Map类型参数,且不能为NULL");
    }
    /**
     * 获取数据过滤的SQL
     */
    private String getSQLFilter(SysUserEntity user, JoinPoint point){
        MethodSignature signature = (MethodSignature) point.getSignature();
        DataFilter dataFilter = signature.getMethod().getAnnotation(DataFilter.class);
        //获取表的别名
        String tableAlias = dataFilter.tableAlias();
        if(StringUtils.isNotBlank(tableAlias)){
            tableAlias +=  ".";
        }
        //部门ID列表
        Set<Long> deptIdList = new HashSet<>();
        //用户角色对应的部门ID列表
        List<Long> roleIdList = sysUserRoleService.queryRoleIdList(user.getUserId());
        if(roleIdList.size() > 0){
            List<Long> userDeptIdList = sysRoleDeptService.queryDeptIdList(roleIdList.toArray(new Long[roleIdList.size()]));
            deptIdList.addAll(userDeptIdList);
        }
        //用户子部门ID列表
        if(dataFilter.subDept()){
            List<Long> subDeptIdList = sysDeptService.getSubDeptIdList(user.getDeptId());
            deptIdList.addAll(subDeptIdList);
        }
        StringBuilder sqlFilter = new StringBuilder();
        sqlFilter.append(" (");
        if(deptIdList.size() > 0){
            sqlFilter.append(tableAlias).append(dataFilter.deptId()).append(" in(").append(StringUtils.join(deptIdList, ",")).append(")");
        }
        //没有本部门数据权限,也能查询本人数据
        if(dataFilter.user()){
            if(deptIdList.size() > 0){
                sqlFilter.append(" or ");
            }
            sqlFilter.append(tableAlias).append(dataFilter.userId()).append("=").append(user.getUserId());
        }
        sqlFilter.append(")");
        if(sqlFilter.toString().trim().equals("()")){
            return null;
        }
        return sqlFilter.toString();
    }
}
 最近下载更多
最近下载更多
                
                ttg2025     LV3
                9月8日
            
            
        
                38735466     LV11
                8月4日
            
            
        
                gann2015     LV25
                6月6日
            
            
        
                陈小灏     LV18
                2月18日
            
            
        
                Mhgfhjyrf     LV3
                2024年12月10日
            
            
        
                15953970869     LV6
                2024年11月10日
            
            
        
                talete     LV3
                2024年10月10日
            
            
        
                微信网友_7134912998903808     LV15
                2024年8月29日
            
            
        
                255921158     LV5
                2024年7月16日
            
            
        
                2578193624     LV2
                2024年6月1日
            
            
         最近浏览更多
最近浏览更多
                
                ttg2025     LV3
                9月8日
            
            
        
                atheking     LV18
                9月4日
            
            
        
                38735466     LV11
                8月4日
            
            
        
                nanjifeng8    
                7月8日
            
            
                    暂无贡献等级
            
        
                短巷拥猫     LV12
                6月23日
            
            
        
                3334004690     LV11
                6月19日
            
            
        
                gann2015     LV25
                6月6日
            
            
        
                luomengqi    
                6月2日
            
            
                    暂无贡献等级
            
        
                yangguang     LV8
                5月1日
            
            
        
                docnnxxy688    
                3月16日
            
            
                    暂无贡献等级
            
        
 
                 
                 
                