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. 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. //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:
|
<<: Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang
>>: Eine kurze Diskussion über die Synchronisierungslösung zwischen MySQL und Redis Cache
Inhaltsverzeichnis 1. Einführung in die PID-Datei...
<br />Jede Familie hat ihre eigenen Probleme...
Vorwort Unabhängig davon, ob es sich um eine eige...
Inhaltsverzeichnis Problembeschreibung Was ist di...
1. Suchen Sie das entsprechende NodeJS-Paket unte...
In diesem Artikel wird der spezifische Code von j...
Laden Sie das RPM-Installationspaket herunter Off...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Vorwort Text 1. Installieren S...
Ich glaube, dass Studenten, die etwas über die Do...
Der DIV-Hintergrund ist halbtransparent, aber die ...
Der Browser zeigt Bilder im TIF-Format an Code kop...
Ich verwende die in CentOS implementierte LDAP-Be...
1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...