Closed qmmm61 closed 1 year ago
版本: v2.6 环境: 本地/线上 复现步骤:设置三个角色,角色1,角色2,角色3,数据权限分别是自定义用户权限,全部用户权限,本级用户权限,设置用户拥有这三个角色,用户获取的数据权限时逻辑不明确。 具体获取用户数据权限的实现在DataServiceImpl的getDeptIds方法
@Override @Cacheable(key = "'user:' + #p0.id") public List<Integer> getDeptIds(UserDto user) { // 用于存储部门id Set<Integer> deptIds = new HashSet<>(); // 查询用户角色 List<RoleSmallDto> roleSet = roleService.findByUsersId(user.getId()); // 获取对应的部门ID for (RoleSmallDto role : roleSet) { DataScopeEnum dataScopeEnum = DataScopeEnum.find(role.getDataScope()); switch (Objects.requireNonNull(dataScopeEnum)) { case THIS_LEVEL: deptIds.add(user.getDept().getId()); break; case CUSTOMIZE: deptIds.addAll(getCustomize(deptIds, role)); break; default: return new ArrayList<>(deptIds); } } return new ArrayList<>(deptIds); }
这里返回数据权限结果集会因为查询用户所有角色集roleSet后,从中取出角色的顺序不同而不同,比如循环roleSet时取出的顺序是角色1,角色2,角色3,那么第一次循环,deptIds包含角色1的数据权限自定义数据权限,第二次循环因为是角色2是全部数据权限,return则直接返回new ArrayList<>(deptIds)后跳出循环,deptIds中就只有角色1的数据权限,最终这个用户就只有角色1的数据权限,根据这个样例不能理解这里返回多角色数据权限的逻辑。 日志提供: 无
页面没有看到数据权限控制的地方
https://github.com/elunez/eladmin/issues/801
版本: v2.6 环境: 本地/线上 复现步骤:设置三个角色,角色1,角色2,角色3,数据权限分别是自定义用户权限,全部用户权限,本级用户权限,设置用户拥有这三个角色,用户获取的数据权限时逻辑不明确。 具体获取用户数据权限的实现在DataServiceImpl的getDeptIds方法
这里返回数据权限结果集会因为查询用户所有角色集roleSet后,从中取出角色的顺序不同而不同,比如循环roleSet时取出的顺序是角色1,角色2,角色3,那么第一次循环,deptIds包含角色1的数据权限自定义数据权限,第二次循环因为是角色2是全部数据权限,return则直接返回new ArrayList<>(deptIds)后跳出循环,deptIds中就只有角色1的数据权限,最终这个用户就只有角色1的数据权限,根据这个样例不能理解这里返回多角色数据权限的逻辑。 日志提供: 无