Die Hauptidee zum dynamischen Festlegen von Routing-Berechtigungen in Vue

Die Hauptidee zum dynamischen Festlegen von Routing-Berechtigungen in Vue

Ich habe zuvor einige dynamische Routing-Einstellungen im Internet gesehen, sie sind jedoch nicht sehr kompatibel mit dem aktuellen Projekt, sodass ich selbst eine implementiert habe. Die Grundidee ist:

1. Binden Sie die ID beim Konfigurieren der Route. Nachdem die Backend-Entwicklung abgeschlossen ist, synchronisieren Sie die ID einfach mit dem Backend. Diese ID ist eindeutig und unverändert. Die Routenadresse und das Symbol können anhand dieser ID gefunden werden.

const routerArr = [
 {
 Weg: '',
 Name: '',
 Komponente: () => import( /* webpackChunkName: "strategiesMaintain" */ '@/components/Layout/Index'),
 Meta: {
 requireAuth: wahr,
 ID: 1,
 Symbol: ‚iconzhanghuguanli‘,
 Titel: 'Route 1'
 },
 Kinder: [{ 
 Pfad: '/verificationLog',
 Name: 'VerificationLog',
 Komponente: () => import( /* webpackChunkName: "verificationLog" */ '@/views/auditManage/verificationLog'),
 Meta: {
 requireAuth: wahr,
 ID: 101,
 Symbol: „Symbol-disanfangyanzhengrizhi“,
 Titel: 'Route 11'
 }
 }, {
 Pfad: '/systemLog',
 Name: 'SystemLog',
 Komponente: () => import( /* webpackChunkName: "systemLog" */ '@/views/auditManage/systemLog'),
 Meta: {
 requireAuth: wahr,
 ID: 102,
 Symbol: „Symbol-xitongcaozuorizhi“,
 Titel: „Route 12“
 }
 }]
 }
];

Standard-RouterArr exportieren;

2. Stellen Sie die Verbindung zwischen der lokalen Route und der Route vom Backend her, hauptsächlich basierend auf der ID-Bindungsroutenadresse und der IconClass

importiere RouterModule aus "@/router/modules";
importiere {http} von '@/utils/http'
Store aus „@/store“ importieren;
importiere { Nachricht } von 'element-ui'

const formateResData = (val) =>{ // Routing-Daten formatieren const obj = {};
 const fn = (arr)=>{
  für (lass i = 0, Artikel; Artikel = arr[i++];) {
  Objekt[Element['meta']['id']] = {
   Pfad: Element['Pfad'],
   Symbolklasse: Element ['Meta'] ['Symbol']
  };
  wenn (Element.Kinder && Element.Kinder.Länge > 0) {
   fn(Element.Kinder);
  }
  }
 }
 fn(Wert);
 gibt Objekt zurück;
};

const MAPOBJ = formateResData(routerModules);
const dealWithData = (navData) => { // Menüdaten verarbeiten let firstLink = "";
 const navIdArr = [];
 const fn = (arr) => {
  für (sei i = 0,item;item = arr[i++];) {
  Element['iconClass'] = MAPOBJ[item.id].iconClass;
  Element['linkAction'] = MAPOBJ[item.id].Pfad;
  navIdArr.push(Artikel-ID);
  if (!firstLink && !item.subMenu) { // Standardsprung festlegen firstLink = item['linkAction'];
  }
  wenn (item.subMenu && item.subMenu.length > 0) {
   fn(Element.Untermenü);
  }
  }
 }
 fn(navData);
 gibt {navData,navIdArr,firstLink} zurück;
};

Lassen Sie navIds = [];

const getNav = async (to={},from={},next=()=>{})=>{ // Navigationsdaten abrufen const {code,data} = await http("/menu/list", {}, "GET"); // Menüdaten abrufen // const data = require("@/mock/api/menuData"); // Mock-Daten verwenden const {navData,navIdArr,firstLink} = dealWithData(data);
 store.commit('setNavData', navData);
 navIds = navIdArr;
 if(to.fullPath == '/index'){ // Anmelden oder zur Startseite zurückkehren next(firstLink);
 }else { // Refreshif(navIds.indexOf(to.meta.id) == -1){ // Das Backend hat die menuMessage.error('Das Menü existiert nicht oder hat keine Berechtigung'); nicht zurückgegeben.
  zurückkehren;
 }
 nächste();
 }
}

export const setGuard = (to={},from={},next=()=>{}) =>{ // Berechtigungen festlegen if(navIds.length === 0){ // Menüdaten wurden noch nicht abgerufen getNav(to,from,next);
 }else { // Menüdaten abrufen if(navIds.indexOf(to.meta.id) == -1){ // Das Backend hat das Menü nicht zurückgegeben Message.error('Das Menü existiert nicht oder es liegt keine Berechtigung vor');
  zurückkehren;
 }
 nächste();
 }
}

3. Konfiguration in mainjs einführen

router.beforeEach((bis, von, weiter) => {
 let token = wlhStorage.get("Autorisierung");
 wenn (zu.Pfad == "/login") {
 storage.clear(); // Cache leeren next();
 } anders {
 if (to.meta.requireAuth && token) { // Anmelden setGuard(to,from,next);
 } else { // Nicht angemeldet next("/login");
 }
 }
})

Zusammenfassen

Dies ist das Ende dieses Artikels zum dynamischen Festlegen von Routingberechtigungen in Vue. Weitere relevante Inhalte zum dynamischen Festlegen von Routingberechtigungen in Vue finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Zwei Methoden zur Vue-Berechtigungskontrolle (Routenüberprüfung)
  • Beispielcode zum Routing-Berechtigungsmanagement von Vue
  • So legen Sie Anmeldeberechtigungen für Routen in Vue fest
  • Vuex zeigt je nach Benutzerberechtigung unterschiedliche Routinglistenfunktionen an
  • Vue Routing Guard, ein Beispiel für die Beschränkung der Zugriffsrechte auf Front-End-Seiten
  • So richten Sie Vue-Routing-Guards und die Berechtigungskontrolle für die Seitenanmeldung ein (zwei Methoden)
  • Zusammenfassung von Methodenbeispielen zur Implementierung des Vue-Berechtigungsroutings
  • Benutzerdefinierte Vue-Anweisungen und dynamisches Routing zur Erzielung einer Berechtigungskontrolle
  • vue-router steuert die Implementierung von Routing-Berechtigungen
  • Implementierungscode der Vue-Routing-Berechtigungsüberprüfungsfunktion

<<:  Java-Beispielcode zum Generieren von zufälligen Zeichen

>>:  Natives JavaScript zur Implementierung einer zufälligen Namensaufruftabelle

Artikel empfehlen

Vue implementiert Akkordeoneffekt

In diesem Artikelbeispiel wird der spezifische Co...

202 kostenlose, hochwertige XHTML-Vorlagen (2)

Nach dem vorherigen Artikel 202 kostenlose hochwe...

Zusammenfassung gängiger Docker-Befehle

Docker-Installation 1. Anforderungen: Linux-Kerne...

Wie implementiert Vue die Kommunikation zwischen Komponenten?

Inhaltsverzeichnis 1. Kommunikation zwischen Vate...

Detaillierte Erklärung zur Interpretation der Nginx-Konfigurationsdatei

Die Nginx-Konfigurationsdatei ist hauptsächlich i...

So führen Sie eine reibungslose if-Beurteilung in js durch

Inhaltsverzeichnis Vorwort Code-Implementierung I...

Ein kurzer Vortrag über Responsive Design

1. Was ist Responsive Design? Responsive Design b...

Detaillierte Analyse, wann Tomcat das Antwortdatagramm zurückschreibt

Es stellt sich die Frage Diese Frage kam auf, als...

Vereinfachen Sie die komplexe Website-Navigation

<br />Das Navigationsdesign stellt eine der ...

Zusammenfassung von Beispielen gängiger Methoden von JavaScript-Arrays

Inhaltsverzeichnis Gängige Array-Methoden concat(...

Perfekte Lösung für das Zeitzonenproblem des Docker Alpine-Image

Als ich kürzlich Docker zum Bereitstellen einer J...

Verwendung des if-Urteils in HTML

Während der Django-Webentwicklung wird beim Schre...

So verbessern Sie die MySQL Limit-Abfrageleistung

Bei MySQL-Datenbankoperationen hoffen wir immer, ...