原理:用户访问接口 → Controller接收请求 → 调用Service层方法 → AOP拦截(DataScopeAspect类) → 动态修改SQL → 执行查询
Service中在函数上添加注释:
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user){
return userMapper.selectUserList(user);
}
Mapper XML末尾中引用权限条件:
<select id="selectUserList" resultType="User">
SELECT * FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
WHERE 1=1
${params.dataScope}
</select>