SysRoleService.list() 非管理员查询角色列表时不应该自动加入部门id限制条件

提问 已结 3 182
dinner3000
悬赏:20积分
版本:renren-security 2.1.0企业版 浏览器:不相关
list实现中的getWrapper调用会去查询sys_role_data_scope表,并将一个dept_id列表加入到sys_role表查询条件中(where in …),但发现sys_role表在2.1.0版本并不会保存dept_id,此列均为null,因此会导致查询不到任何结果。 建议移除标注为:“//普通管理员,只能查询所属部门及子部门的数据”的72~77行 推测原因:上述代码是改为使用sys_role_data_scope来管理数据权限之前的设计 相关SQL: SELECT id,name,remark,dept_id,updater,update_date,home_page,creator,create_date FROM sys_role WHERE id IN (1114810433) AND dept_id IN (1067246875, 1067246875, 1067246875) 相关代码: security-enterprise/renren-admin/src/main/java/io/renren/modules/sys/service/impl/SysRoleServiceImpl.java @Override public List<SysRoleDTO> list(Map<String, Object> params) { List<SysRoleEntity> entityList = baseDao.selectList(getWrapper(params)); return ConvertUtils.sourceToTarget(entityList, SysRoleDTO.class); } private QueryWrapper<SysRoleEntity> getWrapper(Map<String, Object> params){ String name = (String)params.get("name"); QueryWrapper<SysRoleEntity> wrapper = new QueryWrapper<>(); wrapper.like(StringUtils.isNotBlank(name), "name", name); -- remove - start //普通管理员,只能查询所属部门及子部门的数据 UserDetail user = SecurityUser.getUser(); if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) { List<Long> deptIdList = sysDeptService.getSubDeptIdList(user.getDeptId()); wrapper.in(deptIdList != null, "dept_id", deptIdList); } -- remove - end return wrapper; }
回帖
  • 我们设计的时候,其实是这样的,admin属于超级管理员,不归属任何部门,admin创建的角色,也是不归属任何部门的,其他账户没权限查看admin创建的角色。
    0
  • dinner3000
    2019-04-11
    谢谢您的回复。。。看来是我理解错了。。。那我是不是应该着这样做: 1. 为业务系统创建系统管理员 2. 创建相应的组织层级,以及创建对应的系统管理员 3. 使用这些管理员创建相应的角色,账户
    0
  • @dinner3000 是的,这样比较合理
    0
本帖已结贴