Vue implementiert zwei Methoden zur Steuerung der Routing-Berechtigung

Vue implementiert zwei Methoden zur Steuerung der Routing-Berechtigung

Die Routing-Berechtigungskontrolle wird häufig in Hintergrundverwaltungssystemen verwendet, um die Berechtigungen von Seiten einzuschränken, auf die verschiedene Geschäftsmitarbeiter zugreifen können.

Bei Seiten ohne Berechtigung können Sie zur 404-Seite springen oder die Meldung erhalten, dass Sie keine Berechtigung haben.

Methode 1: Routing von Metainformationen (Meta)

Tragen Sie alle Seiten in die Routing-Tabelle ein und prüfen Sie beim Zugriff darauf einfach die Rollenberechtigungen.
vue-router bietet beim Erstellen von Routen eine Metakonfigurationsschnittstelle. Wir können den Routen in den Metadaten entsprechende Berechtigungen hinzufügen und dann die entsprechenden Berechtigungen im Routenwächter überprüfen, um dessen Routensprung zu steuern.

Fügen Sie im Metaattribut den Rollen die Rollen hinzu, die auf diese Route zugreifen können. Nach der Anmeldung jedes Benutzers wird seine Rolle zurückgegeben. Beim Aufrufen der Seite wird dann das Metaattribut der Route mit der Rolle des Benutzers verglichen. Wenn die Rolle des Benutzers in den Rollen der Route enthalten ist, wird der Zugriff erlaubt. Wenn nicht, wird der Zugriff verweigert.

Beispiel 1: Beurteilen nach Rollen

const meinRouter = neuer VueRouter({
 Routen: [{
        Pfad: '/login',
        Name: 'Anmelden',
        Meta: {
         Rollen: ['Administrator', 'Benutzer']
        },
        Komponente: () => import('@/Komponenten/Login')
    },{
        Pfad: '/home',
        Name: 'Heimat',
        Meta: {
            Rollen: ['admin']
        },
        Komponente: () => import('@/views/Home')
    },{
     Pfad: '/404',
     Komponente: () => import('@/components/404')
   }]
})

//Angenommen, die über die Schnittstelle aus dem Hintergrund erhaltene Benutzerrolle kann im Token const role = 'user' gespeichert werden.

myRouter.beforeEach((bis,von,weiter)=>{
 wenn (to.meta.roles.includes(Rolle)) {
  weiter() // freigeben }else{
  next({path:"/404"}) //zur 404-Seite springen}
})

Beispiel 2: Fügen Sie den Metadaten einen Bezeichner hinzu, der Berechtigungen erfordert

const meinRouter = neuer VueRouter({
 Routen: [{
        Pfad: '/login',
        Name: 'Anmelden',
        Meta: {
         Titel: „Anmeldeseite“
         Symbol: „Anmelden“
        },
        Komponente: () => import('@/Komponenten/Login')
    },{
        Pfad: '/home',
        Name: 'Heimat',
        Meta: {
         Titel: „Zuhause“
         Symbol: „Home“,
         requireAuth: wahr
        },
        Komponente: () => import('@/views/Home')
    },{
     Pfad: '/404',
     Komponente: () => import('@/components/404')
   }]
})

myRouter.beforeEach((bis,von,weiter)=>{
 let flag = to.matched.some(Datensatz=>Datensatz.meta.requireAuth);
 //Hier verwenden wir die Matched-Schleife, um den Grund zu finden, warum to.meta nicht direkt verwendet wird:
 //Wenn Unterrouten vorhanden sind, stellen Sie zunächst klar, dass gemäß der normalen Klicklogik auf die Route der ersten Ebene zuerst die Route der zweiten Ebene folgt und die Berechtigungsbeurteilung dieselbe sein muss //to.meta => durchsucht direkt die Metadaten der Unterroute. Wenn die Route der ersten Ebene requireAuth:true nicht hinzufügt, sollte die Routenseite der ersten Ebene blockiert werden und kann nicht auf die Routenseite der zweiten Ebene zugreifen. Wenn der Benutzer die URL-Adressleiste direkt manipuliert, kann die Seite der zweiten Ebene aufgerufen werden, und es können Probleme mit den Berechtigungen auftreten. Dann sollten alle Routen unter dieser Berechtigung mit //to.matched markiert werden => matched ist ein Routen-Array, das die Attribute aller Routen einschließlich der Unterrouten sammelt. Durch die Schleifenbeurteilung und die Suchmethode müssen Sie also nur der Route der ersten Ebene Berechtigungskennungen hinzufügen, um andere Unterrouten darunter zu autorisieren.
 wenn(Flagge){
  nächste()
 }anders{
  weiter({Pfad:"/404"})
 }
})

Nachteile: Es ist eine Verschwendung von Rechenressourcen, jeden Routensprung zu überprüfen. Darüber hinaus sollten Routen, auf die Benutzer keinen Zugriff haben, theoretisch nicht gemountet werden.

Methode 2: Routing-Tabelle dynamisch generieren (addRoutes)

Durch das dynamische Hinzufügen von Menüs und Routing-Tabellen basierend auf Benutzerberechtigungen oder Benutzerattributen können Benutzerfunktionen angepasst werden.
vue-router stellt die Methode addRoutes() bereit, mit der Routen dynamisch registriert werden können. Es ist zu beachten, dass das dynamische Hinzufügen von Routen dazu dient, Routen in die Routing-Tabelle zu pushen. Da Routen der Reihe nach abgeglichen werden, müssen Routen wie 404-Seiten am Ende der dynamischen Hinzufügung platziert werden.

//store.js
// Extrahieren Sie die Routen, die dynamisch in vuex registriert werden müssen const dynamicRoutes = [
  {
    Pfad: '/verwalten',
    Name: 'Verwalten',
    Meta: {
      requireAuth: wahr
    },
    Komponente: () => import('./views/Manage')
  },
  {
    Pfad: '/userCenter',
    Name: 'UserCenter',
    Meta: {
      requireAuth: wahr
    },
    Komponente: () => import('./views/UserCenter')
  }
]

Fügen Sie das Array „userRoutes“ in Vuex hinzu, um das benutzerdefinierte Menü des Benutzers zu speichern. In setUserInfo wird die Routing-Tabelle des Benutzers entsprechend dem vom Backend zurückgegebenen Menü generiert.

//store.js
setUserInfo (Status, Benutzerinfo) {
  state.userInfo = Benutzerinfo
  state.auth = true // Markieren Sie Auth als true, wenn Sie Benutzerinformationen erhalten. Natürlich können Sie userInfo auch direkt beurteilen
  // Benutzerroutingtabelle generieren state.userRoutes = dynamicRoutes.filter(route => {
    returniere userInfo.menus.some(menu => menü.name === route.name)
  })
  router.addRoutes(state.userRoutes) // Routen registrieren}

Menüdarstellung ändern

// App.vue
<div id="nav">
   <router-link to="/">Zuhause</router-link>
   <router-link to="/login">Anmelden</router-link>
   <template v-for="(Menü, Index) von $store.state.userInfo.menus">
     <router-link :to="{ name: menu.name }" :key="index">{{menu.title}}</router-link>
   </Vorlage>
</div>

Dies ist das Ende dieses Artikels über die beiden Möglichkeiten von Vue, die Routing-Berechtigungssteuerung zu implementieren. Weitere relevante Inhalte zur Vue-Routing-Berechtigungssteuerung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Analyse der Vue-Routing-Berechtigungssteuerung
  • Benutzerdefinierte Vue-Anweisungen und dynamisches Routing zur Erzielung einer Berechtigungskontrolle
  • So richten Sie Vue-Routing-Guards und die Berechtigungskontrolle für die Seitenanmeldung ein (zwei Methoden)
  • Zwei Methoden zur Vue-Berechtigungskontrolle (Routenüberprüfung)
  • Detaillierte Erläuterung des Lazy Loading- und Berechtigungsmanagements des Vue-Routers

<<:  Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang

>>:  Eine kurze Diskussion über die Synchronisierungslösung zwischen MySQL und Redis Cache

Artikel empfehlen

Detaillierte Erklärung von PID und Socket in MySQL

Inhaltsverzeichnis 1. Einführung in die PID-Datei...

Vue verwendet dynamische Komponenten, um einen TAB-Umschalteffekt zu erzielen

Inhaltsverzeichnis Problembeschreibung Was ist di...

So aktualisieren Sie die Knotenversion unter CentOs manuell

1. Suchen Sie das entsprechende NodeJS-Paket unte...

js zur Realisierung eines einfachen Puzzlespiels

In diesem Artikel wird der spezifische Code von j...

HTML-Auszeichnungssprache - Tabellen-Tag

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Einführung des Code-Prüftools stylelint zum Erfahrungsaustausch

Inhaltsverzeichnis Vorwort Text 1. Installieren S...

Docker legt Port 2375 frei, was zu Serverangriffen und -lösungen führt

Ich glaube, dass Studenten, die etwas über die Do...

DIV-Hintergrund, halbtransparenter Text, nicht durchscheinender Stil

Der DIV-Hintergrund ist halbtransparent, aber die ...

So zeigen Sie Bilder im TIF-Format im Browser an

Der Browser zeigt Bilder im TIF-Format an Code kop...

So verbergen und entfernen Sie Bildlaufleisten in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...