开源项目官方地址:
https://plus-doc.dromara.org/#/ruoyi-vue-plus/home
场景
在我们的项目中,可能会涉及到多部门的情况。其实,在日常工作中,同一个人在多个部门任职也是比较正常的,所以准备着手改造这个项目中的用户和部门相关的内容,将它改成多部门的结构。
修改步骤
后端版本号:5.3.1
先确定好几个修改的地方:
- 部门相关代码和 SQL
- 用户相关代码和 SQL
- 登录和权限代码和 SQL
4.前端显示修改
修改
- 先把所有表结构中的 create_dept 字段从 Long 改成JSON,用于存放数据的创建部门。
- 移除SysUser 相关表中的 deptId 字段,可以在 VO 对象中,增加 deptList用于显示
- 新增一张新的表,UserDept ,用于存放部门和用户关联表
- 修改所有自带 sql 中的查询用户部门的 sql,改成关联 UserDept
- 修改Sys'LoginService 中,登录成功,设置部门的部分代码
- 修改 BeseEntity 中的 createDept 的类型为 List
-
修改 DataScopeType 中的模板代码
以部门及以下或本人数据为例 旧代码 DEPT_AND_CHILD_OR_SELF("6", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} ) OR #{#userName} = #{#user.userId} ", " 1 = 0 "); 新代码: DEPT_AND_CHILD_OR_SELF("6", " JSON_OVERLAPS(#{#deptName},JSON_ARRAY(#{@sdss.getDeptAndChildByUserId( #user.userId )})) OR #{#userName} = #{#user.userId} ", " 1 = 0 ");8.在SysDataScopeServiceImpl中,新建一个 getDeptAndChildByUserId 方法,用于获取某个用户的部门字符串
/** * 通过用户,查询拼接所有子部门的字符串 * @param userId * @return */ @Override public String getDeptAndChildByUserId(Long userId) { Set<Long> ids = SpringUtils.getBean(ISysDeptService.class).getDeptAndChildByUserId(userId); if (CollUtil.isNotEmpty(ids)) { return StreamUtils.join(ids, Convert::toStr); } return "-1"; }