基于角色的权限控制

image.png

路由设计方案

第一种:全注册

把所有路由的路径都注册好,不管角色。角色只是控制哪个菜单需要显示
image.png

弊端:用户可以通过在浏览器输入url,进入对应的页面,尽管她可能没有这个菜单显示

解决:可以通过路由守卫,跳转前,判断这个用户要跳转的页面,是否符合她的角色

第二种:按角色注册好

就是先在前端代码中,写好各个角色对应的路由,用户登录时判断用户角色,然后加载对应的路由
image.png

弊端:不好修改,如果需求是增加新角色,你得改代码,重新打包发布上线

第三种:动态生成路由(推荐)

image.png
image.png
image.png

生成path和组件的关系
image.png

image.png
image.png
require.context 是 webpack 的一个函数

vite下可以通过 Glob 导入,读取本地文件,为:

  1. const allRouters:RouteRecordRaw[] = []
  2. const routerFiles = import.meta.glob('/src/router/**/*.ts')
  3. for (const path in routerFiles) {
  4. // 获取文件模块里面的路径path
  5. routerFiles[path]().then((mod) => {
  6. console.log(mod)
  7. if (mod.default.component) {
  8. allRouters.push(mod.default)
  9. }
  10. })
  11. }

image.png
image.png

image.png