Zeigen Sie je nach Benutzerberechtigung unterschiedliche Menüseiten an. Wissenspunkte Routenwächter (mit Pre-Guard): Bestimmen Sie basierend auf den Benutzerrollen, welche Routen hinzugefügt werden sollen. Schwierigkeit Der Routenwächter muss bei jeder Änderung der Route aufgerufen werden und die Daten im Speicher werden bei jeder Aktualisierung gelöscht. Daher muss ermittelt werden, ob dem Speicher dynamische Routen hinzugefügt wurden. Bestimmen Sie die Route basierend auf der Rolle und filtern Sie die dynamische Route, um festzustellen, ob die Rolle jeder Route mit der bei der Anmeldung übergebenen Rolle übereinstimmt <Vorlage> <div> <el-Menü :default-active="$route.pfad" Klasse = "el-menu-vertical-demo menu_wrap" Hintergrundfarbe = "#324057" Textfarbe = "weiß" Aktive Textfarbe = "#20a0ff" :collapse="istCollapse" einzigartig geöffnet Router > <el-Untermenü v-for="Artikel in $store.state.Routers" :Schlüssel="item.path" :index="item.pfad" v-if="!item.hidden" > <Vorlagenslot="Titel" > <i class="el-icon-location"></i> <span>{{ item.meta.title }}</span> </Vorlage> <div v-for="chi in item.children" :key="chi.name"> <el-menu-item v-if="!chi.hidden" :index="item.pfad + '/' + chi.pfad"> <i class="el-icon-location"></i>{{ chi.meta.title }} </el-Menüelement> </div> </el-Untermenü> </el-Menü> </div> </Vorlage> <Skript> Standard exportieren { Name: "Menüliste", Daten() { zurückkehren { isCollapse: false, }; }, erstellt() { dies.$bus.$on("getColl", (Daten) => { this.isCollapse = Daten; }); }, Methoden: { } }; </Skript> <Stilbereich> .menu_wrap { Höhe: 100vh; } .el-menu-vertical-demo:nicht(.el-menu--collapse) { Breite: 200px; Höhe: 100vh; } </Stil> Vue von „vue“ importieren VueRouter von „vue-router“ importieren Store aus „../store/index“ importieren Vue.use(VueRouter) const originalPush = VueRouter.prototype.push VueRouter.prototype.push = Funktion push(Standort) { gebe originalPush.call(diesen, Standort).catch(err => err) zurück } exportiere const Routen = [ { Pfad: '/home', Name: 'Vorname', Komponente: () => import('../views/Index.vue'), meta: { Titel: 'Homepage'}, Kinder: [ { Pfad: 'Index', Name: "Home", Komponente: () => import('../views/Home'), meta: { title: 'Home', Rollen: ['Kunde'] } } ] }, { Pfad: '/index', Name: 'NavigationOne', Komponente: () => import('../views/Index.vue'), meta: { title: 'Navigation 1'}, Kinder: [ { Pfad: 'Personal', Name: 'Personal', Komponente: () => import('../views/One/Personnel.vue'), meta: { title: 'Personal', Rollen: ['Kunde'] } }, { Pfad: "Konto", Name: 'Konto', Komponente: () => import('../views/One/Account.vue'), meta: { title: 'Konto', Rollen: ['Kunde'] } }, { Pfad: 'psw', Name: „psw“, Komponente: () => import('../views/One/Password.vue'), meta: { Titel: 'psw', Rollen: ['Kunde'] } } ] }, { Pfad: '/Karte', Name: 'NavigationTwo', Komponente: () => import('../views/Index.vue'), meta: { title: 'Navigation 2'}, Kinder: [ { Pfad: "Aktivität", Name: "Aktivität", Komponente: () => import('../views/Three/Activity.vue'), meta: { title: 'Aktivität', Rollen: ['Kunde'] } }, { Pfad: 'Soziales', Name: "Sozial", Komponente: () => import('../views/Three/Social.vue'), meta: { title: 'Soziales', Rollen: ['Kunde'] } }, { Pfad: "Inhalt", Name: 'Inhalt', Komponente: () => import('../views/Three/Content.vue'), meta: { title: 'Inhalt', Rollen: ['Kunde'] } } ] }, { Pfad: '/zwei', Name: 'NavigationThree', Komponente: () => import('../views/Index.vue'), meta: { title: 'Navigation 3'}, Kinder: [ { Pfad: 'Index', Name: 'Zwei', Komponente: () => import('../views/Two'), meta: { title: 'Zwei', Rollen: ['Kunde'] } }] }, { Pfad: '/404', Name: 'Fehler', versteckt: wahr, Meta: {Titel: 'Fehler'}, Komponente: () => import('../views/Error') } ] exportiere const asyncRouter = [ //Agent3 Mitarbeiter2 { Pfad: '/agent', Komponente: () => import('../views/Index.vue'), Name: 'Agent', meta: { Titel: 'Agent', Rollen: ['Agent', 'Mitarbeiter']}, Kinder: [ { Pfad: 'eins', Name: 'agentOne', Komponente: () => import('@/views/agent/One'), meta: { Titel: 'agentOne', Rollen: ['Agent', 'Mitarbeiter'] } }, { Pfad: 'zwei', Name: 'agentTwo', Komponente: () => import('@/views/agent/Two'), Meta: { Titel: 'agentTwo', Rollen: ['Agent'] } }, { Pfad: 'drei', Name: "agentThree", Komponente: () => import('@/views/agent/Three'), meta: { Titel: 'agentThree', Rollen: ['Agent', 'Mitarbeiter'] } } ] }, //Mitarbeiter3 { Pfad: '/staff', Komponente: () => import('../views/Index.vue'), Name: 'Mitarbeiter', meta: { title: 'Mitarbeiter', Rollen: ['Mitarbeiter']}, Kinder: [ { Pfad: 'eins', Name: 'StaffOne', Komponente: () => import('@/views/Staff/One'), Meta: { Titel: 'StaffOne', Rollen: ['Mitarbeiter'] } }, { Pfad: 'zwei', Name: 'StaffTwo', Komponente: () => import('@/views/Staff/Two'), Meta: { Titel: 'StaffTwo', Rollen: ['Mitarbeiter'] } }, { Pfad: 'drei', Name: 'StaffThree', Komponente: () => import('@/views/Staff/Three'), meta: { Titel: 'StaffThree', Rollen: ['Mitarbeiter'] } } ] }, { Pfad: '*', Umleitung: '/404', versteckt: true } ] const router = neuer VueRouter({ Routen }) router.beforeEach((bis, von, weiter) => { let Rollen = ['Mitarbeiter'] wenn(store.state.Routers.length) { Konsole.log('ja') nächste() } anders { console.log('nicht') store.dispatch('asyncGetRouter', {roles}) .then(res => { router.addRoutes(store.state.addRouters) }) neben}) // Der Unterschied zwischen next() und next({ ...to }): next() ermöglicht next('/XXX'), unendlich lange abzufangen} }) Standardrouter exportieren Vue von „vue“ importieren Vuex von „vuex“ importieren Module aus „./module“ importieren importiere Router, {Routen, asyncRouter} von '../Router' Funktion hatBerechtigung(Route, Rollen) { wenn (route.meta && route.meta.roles) { returniere roles.some(role => route.meta.roles.indexOf(role) >= 0) } anders { returniere wahr } } /* Filtern Sie die asynchrone Routing-Tabelle rekursiv, um Routen zurückzugeben, die der Benutzerrolle entsprechen @param asyncRouter asynchrones Routing @param Rollen Benutzerrolle*/ Funktion filterAsyncRouter(asyncRouter, Rollen) { let filterRouter = asyncRouter.filter(route =>{ wenn (hasPermission (Route, Rollen)) { wenn (route.Kinder && route.Kinder.Länge) { route.children = filterAsyncRouter(route.children, Rollen) } returniere wahr } return false }) RücklauffilterRouter } Vue.Verwenden(Vuex) exportiere standardmäßig neuen Vuex.Store({ Zustand: { addRouter: [], Router: [] }, Mutationen: getRouter(Status, paload) { // konsole.log(paload) Zustand.Router = Routen.concat(paload) state.addRouters = paload // router.addRoutes(paload) } }, Aktionen: { asyncGetRouter({ commit }, data) { const { Rollen } = Daten gib ein neues Versprechen zurück (Auflösen => { let addAsyncRouters = filterAsyncRouter(asyncRouter, Rollen) commit('getRouter', addAsyncRouters) lösen() }) } } }) Dies ist das Ende dieses Artikels mit der detaillierten Erklärung zum dynamischen Hinzufügen von Routen gemäß Benutzerberechtigungen in Vue. Weitere relevante Inhalte zum dynamischen Hinzufügen von Routen in Vue finden Sie in früheren Artikeln auf 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:
|
>>: Der Unterschied zwischen shtml und html
Box-Größe in CSS3 (Inhaltsbox und Rahmenbox) Mit ...
Inhaltsverzeichnis 1. Überprüfen Sie den Status d...
In der Scroll-Ansicht des WeChat-Applets treten b...
Wie wir alle wissen, ist SSH derzeit das zuverläs...
1. Rendern2. Bedienungsschritte 1. Beantragen Sie...
Schauen wir uns zunächst den Code an: ALTER TABLE...
Inhaltsverzeichnis 1. Oberflächliche Kopie 1. Obj...
Ich möchte einen Artikel von Zhang Xinxu zitieren...
Inhaltsverzeichnis 1. Frontend-Steuerung 1. In de...
Die erste Zeile eines Docker-Images beginnt mit e...
Vorwort In diesem Artikel wird hauptsächlich erlä...
CenOS6.7 installiert MySQL8.0.22 (empfohlene Samm...
1. PRIMARY KEY hinzufügen (Primärschlüsselindex) ...
Inhaltsverzeichnis 1. MySQL-Zeittyp 2. Überprüfen...
Inhaltsverzeichnis 1. Open-Source-Lagerverwaltung...