首页>代码>基于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(); } }
![](https://static.zuidaima.com/resource/img/heart_ico.png)
微信网友_7134912998903808 LV9
8月29日
255921158 LV4
7月16日
2578193624 LV2
6月1日
qwe6002 LV10
5月24日
可是不知道么 LV23
4月16日
zolscy LV12
4月4日
微信网友_6927932988952576 LV12
3月30日
儒雅男士 LV8
3月27日
阿昌先生 LV13
3月27日
微信网友_6444139264921600 LV6
3月24日
![](https://static.zuidaima.com/resource/img/cattle_ico.png)
微信网友_7134912998903808 LV9
8月29日
wwwzzzjjj LV15
8月21日
255921158 LV4
7月16日
疯狂小太阳
7月9日
暂无贡献等级
ZALZXB20030525
7月1日
暂无贡献等级
放鞭炮 LV1
6月29日
li151789
6月27日
暂无贡献等级
a562571298 LV8
6月23日
lilu0226 LV7
6月23日
17380184110
6月19日
暂无贡献等级