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

Tutorial-Diagramm zur kostenlosen 64-Bit-Installationsversion von MySQL 5.7.31

1. Herunterladen Download-Adresse: https://dev.my...

Detaillierte Erklärung zum Problem der CSS-Klassennamen

Die folgenden CSS-Klassennamen, die mit einer Zah...

Implementierung des React Page Turner (inkl. Front- und Backend)

Inhaltsverzeichnis Frontend Entwerfen und schreib...

Snake-Spiel mit nativem JS schreiben

In diesem Artikel wird der spezifische Code zum S...

Ein paar Dinge, die Sie über responsives Layout wissen müssen

1. Einleitung Responsive Webdesign ermöglicht die...

Beispielcode für CSS-Pseudoklassen zum Ändern des Eingabeauswahlstils

Hinweis: Diese Tabelle ist aus dem W3School-Tutor...

Verwendung und Analyse des Mysql Explain-Befehls

Mit dem Befehl „mysql explain“ wird gezeigt, wie ...

Beste Möglichkeit, den Schlüssel im JSON-Objekt zu ersetzen

JSON (JavaScript Object Notation, JS Object Notat...

Flexibles Boxmodell von CSS und CSS3 zur Anpassung der Elementbreite (-höhe)

1. CSS realisiert eine feste Breite links und ein...

Tiefgreifendes Verständnis der Matching-Logik von Server und Standort in Nginx

Server-Abgleichlogik Wenn Nginx entscheidet, in w...

Web-Standardanwendung: Neugestaltung der Tencent QQ-Homepage

Die Homepage von Tencent QQ wurde neu gestaltet un...

HTML realisiert Echtzeit-Überwachungsfunktion der Hikvision-Kamera

Das Unternehmen hat vor Kurzem einige CCFA-Aktivi...

JavaScript-Grundlagen für Schleife und Array

Inhaltsverzeichnis Schleife - für Grundlegende Ve...