获取用户角色和权限
若依系统每次跳转某个页面时,都会调用该方法,以检查当前用户是否有权限访问该页面,或者说该页面能基于该用户的角色身份和权限来显示菜单数量。

老办法前端用f12网络活动来获取后台请求路径。

在这里插入图片描述
该方法主要作用是:
1,从springsecurity中获取当前登录用户的信息
2,根据当前用户信息来查询当前用户的角色集合
3,根据当前用户信息来查询当前用户的权限集合
4,将以上信息放入AjaxResult返回给前端。

springsecurity是如何获取当前用户信息的呢?
这里封装了一个安全服务工具类,里面有如下方法
在这里插入图片描述
在这里插入图片描述
从springsecrurity中获取Authentication,然后通过getPrincipal()来获得被验证的身份主体,主体为object,然后转换成loginUser,通过loginUser实体类来获取用户所有信息。
有了用户所有信息,就可以从数据库查询用户的角色集合和权限集合
在这里插入图片描述
在这里插入图片描述

获取用户的路由信息
不同用户可能有不同的权限,能看到的菜单也有不同。
根据用户的userId来查询用户能访问的菜单有哪些。
在这里插入图片描述
接下来我们看下业务层是怎么实现该逻辑
在这里插入图片描述
如果用户是超级管理员,用户就能看到所有的菜单(大部分,因为有些在菜单表中却不会查询,因为这些不属于菜单范畴),如果不是,就会根据用户的角色信息,进行多表联合查询该用户能看到的菜单有哪些,并将这些菜单封装成list。
在这里插入图片描述
在该方法中,会将list中的菜单进行迭代,如果某个菜单是有子菜单,就进入递归方法

在递归方法中,会先调用getChildList方法,来找到当前菜单的子菜单
在这里插入图片描述
通过迭代器,来判断当前菜单id与所有菜单的父id进行对比,是否相等,如果相等,则说明该菜单为当前菜单的子菜单,最后循环结束就将这些子菜单封装成list隶属于当前菜单。

回到递归方法,当前菜单获得属于他们的子菜单集合childList后,会判断childList中的菜单是否还有子菜单,如果有则继续递归。

总结就是第一先找到所有的顶级菜单,这些菜单没有父菜单,然后给这些顶级菜单找子菜单,在子菜单中又递归查找还有没有子菜单,并将这些子菜单层层封装,隶属于各菜单,最后所有的顶级菜单都找到他们的子菜单集合,把顶级菜单集合封装成returnList返回给Controller层,之后返回给前端。
returnList就相当于三级菜单。

Logo

快速构建 Web 应用程序

更多推荐