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

Beispiel für die Implementierung eines gestrichelten Rahmens mit html2canvas

html2canvas ist eine Bibliothek, die Canvas aus H...

Detaillierte Erklärung zur Verwendung von Vue-Resource-Interceptors

Vorwort Abfangjäger In einigen modernen Front-End...

Verwenden von HTML+CSS zum Verfolgen von Mausbewegungen

Da Benutzer immer datenschutzbewusster werden und...

Häufige Tomcat-Ausnahmen und Lösungscodebeispiele

Das Unternehmensprojekt wurde in Java entwickelt ...

Tutorial zur Installation von MySQL8 unter Linux CentOS7

1. Installation der RPM-Version Überprüfen Sie, o...

Hyperlink-Tag für HTML-Webseiten

Lernprogramm zum Hyperlink-Tag einer HTML-Webseit...

Webdesign-Referenz Firefox-Standardstil

Obwohl das W3C einige Standards für HTML festgeleg...

Anwendungsbeispiele für React Hooks

Inhaltsverzeichnis Ein einfaches Komponentenbeisp...

Node implementiert Suchfeld für Fuzzy-Abfragen

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Diskussion über vier Lösungen für Vue Single Page SEO

Inhaltsverzeichnis 1.Bereitstellung der serversei...

MySQL-Grundlagen-Tutorial: Detaillierte Erklärung der DML-Anweisungen

Inhaltsverzeichnis DML-Anweisungen 1. Datensätze ...

Erste Schritte mit GDB unter Linux

Vorwort gdb ist ein sehr nützliches Debugging-Too...

Sicherheitskonfigurationsstrategie für CentOS-Server

In letzter Zeit wurde der Server häufig mit Brute...

So löschen Sie ein Image in Docker

Der Befehl zum Löschen von Bildern im Docker laut...