首页>代码>基于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(); } }

陈小灏 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日
qwe6002 LV10
2024年5月24日
可是不知道么 LV23
2024年4月16日
zolscy LV24
2024年4月4日

docnnxxy688
3月16日
暂无贡献等级
哪里的完整版 LV8
2月26日
陈小灏 LV18
2月18日
444105047 LV6
1月17日
微信网友_7338401665241088
1月13日
暂无贡献等级
weishenme1993 LV9
1月1日
srmess LV4
2024年12月30日
WHY-small LV15
2024年12月28日
a3870764722a LV22
2024年12月17日
微信网友_7290593889931264
2024年12月10日
暂无贡献等级