2021.10.01
项目参考:
1、后端:https://www.bilibili.com/video/BV1y7411R73P
2、前端:https://www.bilibili.com/video/BV1fw411d7R5?p=31
权限控制
1、从后端获取该用户拥有的权限
因为antd渲染时需要特定的层级结构,所以就沿用之前渲染表格写的接口,然后进行了一些调整
感觉这么写好麻烦,而且在循环里面调用SQL感觉不太好
SQL也是,连接了4个表(根据userId通过中间表user_role获取其角色,在根据其角色通过中间表role_permission获取权限,再以父权限id为条件查询“某用户拥有的某父菜单下的二级菜单”),这条sql要执行多次
但是我不知道这种层次结构还能怎么写了
2、前台渲染
有对应的权限,才展示对应的菜单,从而实现权限的控制
// TODO 路由权限控制
但是这样还有个问题,因为前端路由控制是写死的,所以就算没有菜单,但只要知道菜单的路径,也能访问相应的内容,所以要做的更好的话,需要动态配置前端路由,这点后面再考虑要不要做
另外还学到一个很酷的东西,即页面切换的loading效果
每次切换路由都会重新渲染SysRouter,所以在其return前start(),并在mount后(即useEffect生命周期函数)done(),就能实现loading的效果。
// TODO 今天算了埋了两个坑了
既然路由切换的loading做了,也考虑后面做一下异步请求后台数据的loading效果,用axios的拦截器貌似可以做到(否则要么封装axios,要么在所有的axios上添加loading效果),貌似是一个不错的选择。