权限验证篇章:
(梳理下方便自己理解,以后再慢慢补充吧--2020/12/25;其实也就这些东西,无非再把细化每个方法调用再细致些)
1.动态路由权限验证
这里的路由分为两种,constantRoutes 和 asyncRoutes。 constantRoutes: 代表那些不需要动态判断权限的路由,如登录页、404、等通用页面。 asyncRoutes: 代表那些需求动态判断权限并通过 addRoutes 动态添加的页面;
将路由分为:constantRoutes 和 asyncRoutes ·
将路由分为:constantRoutes 和 asyncRoutes
· 用户登录系统时,会动态生成路由,其中 constantRoutes 必然包含,asyncRoutes 会进行过滤;
· asyncRoutes 过滤的逻辑是看路由下是否包含 meta 和 meta.roles 属性,如果没有该属性,所以这是一个通用路由,不需要进行权限校验;如果包含 roles 属性则会判断用户的角色是否命中路由中的任意一个权限,如果命中,则将路由保存下来,如果未命中,则直接将该路由舍弃;
· asyncRoutes 处理完毕后,会和 constantRoutes 合并为一个新的路由对象,并保存到 vuex 的 permission/routes 中;
· 用户登录系统后,侧边栏会从 vuex 中获取 state.permission.routes,根据该路由动态渲染用户菜单。
2》常规登录路由判断
- 对所有访问的路由进行拦截;
- 访问路由时会从 Cookie 中获取 Token,根据有无Token情况判断
- Token存在情况:
(如果获取到token) 如果路径为login则重定向到首页; 判断用户角色是否存在,如果角色存在,则直接访问; 如果是异步获取用户角色,则根据用户橘色,动态生成路由--》调用router.addRoutes动态添加到路由; 如果遇见错误则重定向到登录页;
Token不存在情况:
没有获取到token情况 如果访问url再白名单中,则直接访问,如果不在白名单的那种,则直接重定向到登录页,此时会将路由生成一个 redirect 参数传入 login 组件,实际访问的路由为:/login?redirect=/xxx