1.权限管理
因为客户管理系统涉及的用户和权限比较多,所以要做权限管理
1.1 大致思路是前端会有一份路由表,它表示了每一个路由可访问的权限。当用户登录之后,通过 token 获取用户的 role ,
动态根据用户的 role 算出其对应有权限的路由,再通过router.addRoutes动态挂载路由。
我们公司现在就是前端来控制页面级的权限,不同权限的用户显示不同的侧边栏和限制其所能进入的页面,
后端则会验证每一个涉及请求的操作,验证其是否有该操作的权限,每一个后台的请求不管是 get 还是 post
都会让前端在请求 header里面携带用户的 token,后端会根据该 token 来验证用户是否有权限执行该操作。
若没有权限则抛出一个对应的状态码,前端检测到该状态码,做出相对应的操作。
1.2 具体实现
1.创建vue实例的时候将vue-router挂载,但这个时候vue-router挂载一些登录或者不用权限的公用的页面。
2.当用户登录后,获取用户的role,将role和路由表每个页面的需要的权限作比较,生成最终用户可访问的路由表。
3.调用router.addRoutes(store.getters.addRouters)添加用户可访问的路由。
4.使用vuex管理路由表,根据vuex中可访问的路由渲染侧边栏组件。
1.怎么挂载的?
首先权限控制的代码都写在permission.js中,然后在入口文件中导入。
permission.js主要是用导航守卫和store中封装的方法来进行路由权限设置。
主要对token和用户角色的判断,
详细内容是
1.没有token,判断跳转页面是否属于白名单,属于跳转,不属于跳转到登陆页
2.有token 跳转的是否是登陆页,是的话跳到首页。
3.不是登陆页的话,判断store中用户是否有角色(getInfo),有的话直接跳转
4.如果没有角色,通过store的方法获取角色,根据角色生成路由表,用addRouters添加路由表
(generateRoutes)2.根据角色生成路由表的方法是怎么写的?
传入roles参数,设置个中间变量存储可访问路由。如果角色是超级管理员,就把所有动态的路由
赋值给可访问路由,如果不是超级管理员,根据roles和所有动态路由这两个参数通过筛选动态路由方法,获取可访问路由,然后
将可访问路由提交给设置路由方法,生成当前的路由表3.筛选动态路由方法怎么写的?
遍历路由,判断路由是否有对应的roles,如果有再判断该路由的子路由是否有对应的roles,将符合的
路由push到临时对象中,在遍历后进行返回4.如何判断该路由的子路由是否有对应的roles
比较路由的meta属性的roles是否包含要判断的角色role5.如何把路由渲染侧边栏组件
通过vuex中的getters取到state中的可访问组件,然后在侧边栏组件中通过mapGetters将vuex中的getters
映射到组件的计算属性上,然后通过遍历将路由渲染到侧边栏组件上