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
1. Herunterladen Download-Adresse: https://dev.my...
Die folgenden CSS-Klassennamen, die mit einer Zah...
Inhaltsverzeichnis Frontend Entwerfen und schreib...
1. Inline-Stil, platziert in <body></body...
In diesem Artikel wird der spezifische Code zum S...
1. Einleitung Responsive Webdesign ermöglicht die...
1. Installieren Sie MySQL: udo apt-get installier...
Hinweis: Diese Tabelle ist aus dem W3School-Tutor...
Mit dem Befehl „mysql explain“ wird gezeigt, wie ...
JSON (JavaScript Object Notation, JS Object Notat...
1. CSS realisiert eine feste Breite links und ein...
Server-Abgleichlogik Wenn Nginx entscheidet, in w...
Die Homepage von Tencent QQ wurde neu gestaltet un...
Das Unternehmen hat vor Kurzem einige CCFA-Aktivi...
Inhaltsverzeichnis Schleife - für Grundlegende Ve...