一、配置路由权限

在Vue中,可以使用Vue Router来配置路由权限。以下是一种常见的方法:

  1. 在路由文件(通常是router/index.js)中,定义你的路由配置。
  2. 为每个路由添加一个meta字段,用于存储权限信息。例如:
const routes = [
  {
    path: '/dashboard',
    name: 'Dashboard',
    component: Dashboard,
    meta: { requiresAuth: true } // 需要登录权限
  },
  {
    path: '/profile',
    name: 'Profile',
    component: Profile,
    meta: { requiresAuth: true } // 需要登录权限
  },
  {
    path: '/public',
    name: 'Public',
    component: Public,
    meta: { requiresAuth: false } // 不需要登录权限
  },
  // 其他路由...
];
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  1. 在Vue Router实例中添加全局的导航守卫(navigation guards)。
    • 在路由文件中引入需要的工具:import { router } from ‘@/router/index.js’;
    • 使用beforeEach导航守卫来检查用户是否有适当的权限。例如:
router.beforeEach((to, from, next) => {
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
  const isAuthenticated = true; // 根据实际情况判断是否已认证
  if (requiresAuth && !isAuthenticated) {
    // 没有权限,跳转到登录页面
    next('/login');
  } else {
    // 有权限,继续导航
    next();
  }
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

这个例子中,我们使用了一个常量来代表用户是否已认证,你可以根据实际情况来替换。如果用户没有登录且要访问需要权限的页面,我们将会把它导航到登录页面。

二、 动态路由

根据用户的角色权限信息动态生成路由细节,可以使用Vue Router的动态路由配置功能。

首先,在路由配置文件中定义一个基础路由(Base Route),这是所有用户都能访问的路由:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  // 其他基础路由...
];
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

然后,根据用户的角色权限信息生成需要添加的路由,并将它们添加到路由配置中。可以通过动态导入组件的方式实现:

// 根据角色权限信息生成需要添加的路由
const generateRoutes = (roles) => {
  let dynamicRoutes = [];
  
  // 根据角色权限信息生成需要添加的路由
  if (roles.includes('admin')) {
    dynamicRoutes.push({
      path: '/admin',
      name: 'Admin',
      component: () => import('@/views/Admin'),
      meta: { role: 'admin' } // 可选的元数据,用于做权限校验
    });
  }
  
  if (roles.includes('user')) {
    dynamicRoutes.push({
      path: '/user',
      name: 'User',
      component: () => import('@/views/User'),
      meta: { role: 'user' } // 可选的元数据,用于做权限校验
    });
  }
  
  return dynamicRoutes;
};

// 根据用户的角色权限信息生成需要添加的路由
const dynamicRoutes = generateRoutes(userRoles);

// 将动态生成的路由添加到路由配置中
const router = new VueRouter({
  routes: [
    ...routes,
    ...dynamicRoutes
  ]
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

在上面的代码中,generateRoutes函数根据用户的角色权限信息生成需要添加的路由,然后将这些路由通过动态导入组件的方式添加到路由配置中。

使用了元数据meta来给路由添加了一个role属性,用于做权限校验。

最后,将生成的路由添加到路由配置中,即可动态生成路由细节并根据用户的角色权限信息进行权限控制。

三、vue路由传值

在Vue中,可以使用路由参数(route parameters)或查询参数(query parameters)来传递值给路由。

  1. 路由参数(Route Parameters):

    • 在路由配置中定义需要传递的参数,使用:作为前缀。例如:
    const routes = [
      {
        path: '/user/:id',
        name: 'User',
        component: User
      },
      // 其他路由...
    ];
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 在组件中,可以通过$route.params来访问传递的参数。例如:
    export default {
      mounted() {
        const userId = this.$route.params.id;
        // 使用传递的参数进行操作...
      }
    };
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 在使用router-link组件来生成链接时,可以使用to属性传递参数。例如:
    <router-link :to="{ name: 'User', params: { id: userId } }">User Page</router-link>
    
    • 1.
  2. 查询参数(Query Parameters):

    • 在路由配置中,不需要定义参数,直接在路径后面添加查询参数。例如:
    const routes = [
      {
        path: '/user',
        name: 'User',
        component: User
      },
      // 其他路由...
    ];
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 在组件中,可以通过$route.query来访问查询参数。例如:
    export default {
      mounted() {
        const userId = this.$route.query.id;
        // 使用查询参数进行操作...
      }
    };
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 在使用router-link组件来生成链接时,可以使用to属性传递查询参数。例如:
    <router-link :to="{ name: 'User', query: { id: userId } }">User Page</router-link>
    
    • 1.

这样,就可以在路由中传递参数,并在组件中使用这些参数进行操作。