Explication détaillée de la façon dont vue implémente le contrôle des autorisations de routage

PHPz
Libérer: 2023-04-12 10:00:45
original
6213 Les gens l'ont consulté

Vue est l'un des frameworks front-end les plus populaires de nos jours. Par rapport à la méthode traditionnelle de rendu de page, il accorde plus d'attention à la gestion du routage front-end. Dans les projets réels, les autorisations d'accès au routage frontal sont également un problème très important. Alors, comment implémenter le contrôle des autorisations de routage dans Vue ?

Dans Vue, il existe deux manières principales d'implémenter le contrôle des autorisations de routage : l'une consiste à contrôler sur le front-end, c'est-à-dire à générer dynamiquement des tables de routage en fonction des différentes autorisations des utilisateurs ; Autrement dit, le frontal initie une requête au back-end et génère la table de routage correspondante en fonction des informations d'autorisation renvoyées.

  1. Méthode de contrôle frontal

Dans la méthode de contrôle frontal, nous pouvons implémenter le contrôle des autorisations de routage à travers les étapes suivantes :

1.1 Configurer dans le fichier de configuration de routage

Dans Vue, nous utilisons généralement index.js sous le dossier >router, dans lequel diverses informations de routage seront configurées. Lors de l'exécution du contrôle des autorisations de routage, nous pouvons configurer les informations méta du routage dans ce fichier pour stocker les informations d'autorisation de routage. router文件夹下创建一个index.js文件,文件中会配置各种路由信息。在进行路由权限控制时,我们可以在这个文件中配置路由的meta信息,用于存储路由的权限信息。

比如,我们可以这样定义一个需要根据用户权限来控制访问的路由:

{
  path: '/admin',
  name: 'admin',
  component: () => import('@/views/Admin.vue'),
  meta: { requiresAuth: true }
},
Copier après la connexion

在这个路由配置中,我们定义了一个名为requiresAuthmeta属性,用于标记这是一个需要控制权限的路由。

1.2 在路由拦截器中进行控制

拦截器实际上就是一段代码,用于在某些特定的情况下,拦截请求并执行指定的操作。在Vue中,我们可以使用beforeEach方法来拦截路由请求,进行权限控制。

比如,我们可以这样定义一个beforeEach方法:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.getters.isLoggedIn) {
      next({ path: '/login' });
    } else {
      next();
    }
  } else {
    next();
  }
});
Copier après la connexion

在这个拦截器中,我们通过判断当前需要访问的路由与之前定义的meta属性来判断是否需要进行权限控制。如果需要,我们再根据用户的登录状态等信息进行访问控制,并在必要时跳转到指定的页面。

  1. 后端控制方法

在后端控制方法中,我们需要通过向后端发送请求,获取返回的用户权限信息,然后在生成路由表时进行相应的控制。

比如,在一个基于JWT的后端返回/admin这个路由需要管理员权限才能访问,我们可以这样来获取用户的权限信息:

const response = await axios.get('/user');
const permissions = response.data.permissions;
Copier après la connexion

在获取到用户的权限信息后,我们可以利用Vue Router的动态路由生成等功能,来动态地生成路由表。

比如,我们可以这样定义一个动态生成路由表的函数:

function generateRoutesFromMenu (menu = [], permissions = {}) {
  const routes = []

  for (let i = 0, l = menu.length; i < l; i++) {
    const item = menu[i]
    const route = {
      path: item.path,
      name: item.name,
      meta: item.meta, // 从菜单项中提取出路由的meta信息
      component: item.component ? loadView(item.component) : null,
      children: item.children ? generateRoutesFromMenu(item.children, permissions) : []
    }

    // 如果路由需要控制权限
    if (route.meta && route.meta.requiresAuth) {
      // 判断用户是否有权限访问该路由
      if (permissions[route.meta.permissionKey]) {
        // 用户有权限,则把该路由加入到路由表中
        routes.push(route)
      }
    } else {
      // 如果不需要权限控制,则直接加入到路由表中
      routes.push(route)
    }
  }

  return routes
}
Copier après la connexion

在这个函数中,我们可以看到,我们通过定义菜单项中的meta

Par exemple, nous pouvons définir une route qui doit contrôler l'accès en fonction des autorisations des utilisateurs comme ceci :

rrreee

Dans cette configuration de routage, nous définissons une méta nommée requiresAuth >Attribut utilisé pour marquer ceci comme un itinéraire nécessitant des autorisations de contrôle. 🎜🎜1.2 Contrôle dans l'intercepteur de route🎜🎜Un intercepteur est en fait un morceau de code utilisé pour intercepter des requêtes et effectuer des opérations spécifiées dans certaines circonstances spécifiques. Dans Vue, nous pouvons utiliser la méthode beforeEach pour intercepter les requêtes de routage et effectuer un contrôle des autorisations. 🎜🎜Par exemple, nous pouvons définir une méthode beforeEach comme celle-ci : 🎜rrreee🎜Dans cet intercepteur, nous déterminons la route à laquelle il faut actuellement accéder et la méta précédemment définie. attribut. Déterminez si le contrôle des autorisations est requis. Si nécessaire, nous effectuerons un contrôle d'accès en fonction du statut de connexion de l'utilisateur et d'autres informations, et passerons à la page spécifiée si nécessaire. 🎜
    🎜Méthode de contrôle backend🎜🎜🎜Dans la méthode de contrôle backend, nous devons obtenir les informations d'autorisation utilisateur renvoyées en envoyant une requête au backend, puis effectuer le contrôle correspondant lors de la génération de la table de routage . 🎜🎜Par exemple, si un backend basé sur JWT renvoie /admin, cette route nécessite des autorisations d'administrateur pour y accéder. Nous pouvons obtenir les informations d'autorisation de l'utilisateur comme ceci : 🎜rrreee🎜Après avoir obtenu les informations d'autorisation de l'utilisateur Enfin. , nous pouvons utiliser la génération de routes dynamiques de Vue Router et d'autres fonctions pour générer dynamiquement des tables de routage. 🎜🎜Par exemple, nous pouvons définir une fonction qui génère dynamiquement une table de routage comme celle-ci : 🎜rrreee🎜Dans cette fonction, nous pouvons voir que nous marquons quelles routes doivent être marquées en définissant l'attribut meta dans l'élément de menu Effectuer le contrôle des autorisations. Lors de la génération de la table de routage, nous déterminons si ces routes doivent être ajoutées à la table de routage en fonction des informations d'autorisation de l'utilisateur. Si le contrôle des autorisations n'est pas requis, nous pouvons l'ajouter directement à la table de routage. 🎜🎜Pour résumer, il existe deux manières principales d'implémenter le contrôle des autorisations de routage dans Vue : l'une consiste à le contrôler sur le front-end, c'est-à-dire à générer dynamiquement des tables de routage en fonction des différentes autorisations des utilisateurs ; Contrôle de l'interface back-end, c'est-à-dire que le front-end initie une demande au back-end et génère la table de routage correspondante en fonction des informations d'autorisation renvoyées. Dans le développement réel, nous pouvons choisir une méthode appropriée pour mettre en œuvre le contrôle des autorisations de routage en fonction des conditions spécifiques du projet. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!