Heim Web-Frontend js-Tutorial So laden Sie das Berechtigungsverwaltungsmodul (ausführliches Tutorial)

So laden Sie das Berechtigungsverwaltungsmodul (ausführliches Tutorial)

Jun 11, 2018 pm 05:36 PM
vue组件 Rechteverwaltungsmodul

In diesem Artikel wird ausführlich erläutert, wie VUE-Komponenten dynamisch in das Berechtigungsverwaltungsmodul geladen werden. Freunde, die diesbezüglich Bedarf haben, können mitmachen und lernen.

In diesem Artikel werden wir hauptsächlich über die Anmeldung und das dynamische Laden von Komponenten sprechen.

Anmeldestatus speichern

Wenn sich ein Benutzer erfolgreich anmeldet, müssen die Anmeldeinformationen des aktuellen Benutzers zur späteren Verwendung lokal gespeichert werden. Die spezifische Implementierung lautet wie folgt:

Bei erfolgreicher Anmeldung werden Daten gespeichert

Nachdem der Anmeldevorgang erfolgreich ausgeführt wurde, werden die Daten über den Festschreibungsvorgang an den Speicher übermittelt. Der Kerncode lautet wie folgt:

Der Kerncode von
this.postRequest('/login', {
  username: this.loginForm.username,
  password: this.loginForm.password
}).then(resp=> {
  if (resp && resp.status == 200) {
  var data = resp.data;
  _this.$store.commit('login', data.msg);
  var path = _this.$route.query.redirect;
  _this.$router.replace({path: path == '/' || path == undefined ? '/home' : path});
  }
});
Nach dem Login kopieren

store

store lautet wie folgt:

export default new Vuex.Store({
 state: {
  user: {
   name: window.localStorage.getItem('user' || '[]') == null ? '未登录' : JSON.parse(window.localStorage.getItem('user' || '[]')).name,
   userface: window.localStorage.getItem('user' || '[]') == null ? '' : JSON.parse(window.localStorage.getItem('user' || '[]')).userface
  }
 },
 mutations: {
  login(state, user){
   state.user = user;
   window.localStorage.setItem('user', JSON.stringify(user));
  },
  logout(state){
   window.localStorage.removeItem('user');
  }
 }
});
Nach dem Login kopieren

Um Probleme zu reduzieren, wird der Nachdem sich der Benutzer erfolgreich angemeldet hat, werden die Daten in localStorage gespeichert (um zu verhindern, dass der Benutzer drückt. Daten gehen nach der F5-Aktualisierung verloren). Sie werden in Form einer Zeichenfolge gespeichert und beim Abrufen in JSON konvertiert. Wenn sich der Benutzer abmeldet, löschen Sie die Daten in localStorage.

Dynamisches Laden von Komponenten

Im Berechtigungsverwaltungsmodul ist dies der Kern des Frontends.

Kernidee

Nachdem sich der Benutzer erfolgreich angemeldet hat, sendet der Benutzer vor dem Aufrufen der Startseite eine Anfrage an den Server, um die aktuellen Menüinformationen und Komponenteninformationen abzurufen . Der Server gibt die Rolle des aktuellen Benutzers und die der Rolle entsprechenden Ressourcen eine JSON-Zeichenfolge mit dem folgenden Format zurück:

[
  {
    "id": 2,
    "path": "/home",
    "component": "Home",
    "name": "员工资料",
    "iconCls": "fa fa-user-circle-o",
    "children": [
      {
        "id": null,
        "path": "/emp/basic",
        "component": "EmpBasic",
        "name": "基本资料",
        "iconCls": null,
        "children": [],
        "meta": {
          "keepAlive": false,
          "requireAuth": true
        }
      },
      {
        "id": null,
        "path": "/emp/adv",
        "component": "EmpAdv",
        "name": "高级资料",
        "iconCls": null,
        "children": [],
        "meta": {
          "keepAlive": false,
          "requireAuth": true
        }
      }
    ],
    "meta": {
      "keepAlive": false,
      "requireAuth": true
    }
  }
]
Nach dem Login kopieren

Nach dem Abrufen dieser Zeichenfolge führt das Frontend zwei Dinge aus: 1. Fügen Sie dynamisch hinzu json zur aktuellen Route; 2. Speichern Sie die Daten im Store, und dann rendert jede Seite das Menü basierend auf den Daten im Store.

Die Kernidee ist nicht schwierig. Werfen wir einen Blick auf die Umsetzungsschritte.

Zeitpunkt der Datenanforderung

Dies ist sehr wichtig.

Einige Freunde fragen sich vielleicht, warum das so schwierig ist. Kann ich es nicht einfach anfordern, nachdem ich mich erfolgreich angemeldet habe? Ja, es ist möglich, nach erfolgreicher Anmeldung Menüressourcen anzufordern. Nachdem die Anfrage eingegangen ist, speichern wir sie für die nächste Verwendung. Es tritt jedoch ein weiteres Problem auf, wenn der Benutzer nach erfolgreicher Anmeldung auf ein bestimmtes untergeordnetes Element klickt Melden Sie sich an, Seite, geben Sie die Unterseite ein und drücken Sie dann F5 zum Aktualisieren. Zu diesem Zeitpunkt ist es GG, da die Daten im Speicher nach der Aktualisierung mit F5 verschwunden sind und wir die Menüressourcen nur einmal beim Anmelden angefordert haben ist erfolgreich. Es gibt zwei Ideen, um dieses Problem zu lösen: 1. Speichern Sie die Menüressourcen nicht im Store, sondern in localStorage, damit die Daten auch nach der Aktualisierung mit F5 noch vorhanden sind. 2. Direkt in der gemounteten Methode Gehen Sie auf jeder Seite einmal zu „Menüressourcen laden“.

Da Menüressourcen sehr sensibel sind, ist es am besten, sie nicht lokal zu speichern. Deshalb habe ich Option 1 aufgegeben, aber Option 2 ist etwas arbeitsintensiv, also habe ich einen Schritt unternommen, um sie zu vereinfachen Navigationsschutz im Routing.

Route Navigation Guard

Meine spezifische Implementierung ist wie folgt: Erstellen Sie zunächst ein Routen-Array im Store, bei dem es sich um ein leeres Array handelt, und aktivieren Sie dann den globalen Routen-Guard wie folgt:

router.beforeEach((to, from, next)=> {
  if (to.name == 'Login') {
   next();
   return;
  }
  var name = store.state.user.name;
  if (name == '未登录') {
   if (to.meta.requireAuth || to.name == null) {
    next({path: '/', query: {redirect: to.path}})
   } else {
    next();
   }
  } else {
   initMenu(router, store);
   next();
  }
 }
)
Nach dem Login kopieren

Der Code hier ist sehr kurz, lassen Sie mich eine einfache Erklärung geben:

1 Wenn die Seite, zu der Sie gehen möchten, die Anmeldeseite ist, gibt es dazu nichts zu sagen gehen Sie direkt.

2. Wenn es sich nicht um eine Anmeldeseite handelt, erhalte ich zunächst den aktuellen Anmeldestatus aus dem Store. Wenn ich nicht angemeldet bin, verwende ich das requireAuth-Attribut des Meta-Attributs im Routing, um festzustellen, ob die Seite angezeigt werden soll Wenn ja, springen Sie zurück zur Anmeldeseite und übergeben Sie gleichzeitig den Pfad der Seite, zu der Sie gehen möchten, als Parameter an die Anmeldeseite, damit Sie zum Ziel springen können Wenn Sie sich nicht anmelden müssen, gehen Sie direkt zur Seite (tatsächlich gibt es in diesem Projekt nur die Anmeldeseite). Wenn Sie bereits angemeldet sind, initialisieren Sie zuerst das Menü und springen dann.

Die Funktionsweise des Initialisierungsmenüs ist wie folgt:

export const initMenu = (router, store)=> {
 if (store.state.routes.length > 0) {
  return;
 }
 getRequest("/config/sysmenu").then(resp=> {
  if (resp && resp.status == 200) {
   var fmtRoutes = formatRoutes(resp.data);
   router.addRoutes(fmtRoutes);
   store.commit('initMenu', fmtRoutes);
  }
 })
}
export const formatRoutes = (routes)=> {
 let fmRoutes = [];
 routes.forEach(router=> {
  let {
   path,
   component,
   name,
   meta,
   iconCls,
   children
  } = router;
  if (children && children instanceof Array) {
   children = formatRoutes(children);
  }
  let fmRouter = {
   path: path,
   component(resolve){
    if (component.startsWith("Home")) {
     require(['../components/' + component + '.vue'], resolve)
    } else if (component.startsWith("Emp")) {
     require(['../components/emp/' + component + '.vue'], resolve)
    } else if (component.startsWith("Per")) {
     require(['../components/personnel/' + component + '.vue'], resolve)
    } else if (component.startsWith("Sal")) {
     require(['../components/salary/' + component + '.vue'], resolve)
    } else if (component.startsWith("Sta")) {
     require(['../components/statistics/' + component + '.vue'], resolve)
    } else if (component.startsWith("Sys")) {
     require(['../components/system/' + component + '.vue'], resolve)
    }
   },
   name: name,
   iconCls: iconCls,
   meta: meta,
   children: children
  };
  fmRoutes.push(fmRouter);
 })
 return fmRoutes;
}
Nach dem Login kopieren

Bestimmen Sie im Initialisierungsmenü zunächst, ob die Daten im Speicher vorhanden sind. Dies bedeutet, dass dieser Sprung normal ist springen, nicht der Benutzer. Drücken Sie F5 oder geben Sie eine Adresse direkt in die Adressleiste ein. Andernfalls gehen Sie zum Lademenü. Nachdem Sie das Menü aufgerufen haben, verwenden Sie zunächst die formatRoutes-Methode, um den vom Server zurückgegebenen JSON in das vom Router benötigte Format zu konvertieren. Hier konvertieren wir hauptsächlich die Komponente, da die vom Server zurückgegebene Komponente eine Zeichenfolge ist, aber was im Router benötigt wird ist eine Komponente, daher laden wir die erforderlichen Komponenten einfach dynamisch in die formatRoutes-Methode. Nach erfolgreicher Vorbereitung des Datenformats werden die Daten einerseits im Speicher gespeichert und andererseits mithilfe der addRoutes-Methode im Routing dynamisch zum Routing hinzugefügt.

Menü-Rendering

Zuletzt holen Sie sich auf der Startseite den Menü-JSON aus dem Store und rendern ihn in ein Menü. Der entsprechende Code kann auf der Startseite angezeigt werden. vue. Keine Notwendigkeit, ins Detail zu gehen.

OK, danach können verschiedene Benutzer nach erfolgreicher Anmeldung unterschiedliche Menüs sehen.

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

So erhalten Sie den Wert in select in vue.js (ausführliches Tutorial)

in Vue2.0 Wie Filter in Reihe verwenden?

Wie kehre ich über die Tween-Methode im Vue-Projekt nach oben zurück?

Wie kann ich mit Vue feststellen, dass der Eingabeinhalt ausschließlich aus Leerzeichen besteht?

Wie kann ich mit js feststellen, dass das Eingabefeld kein Leerzeichen oder Nullwert sein darf?

Das obige ist der detaillierte Inhalt vonSo laden Sie das Berechtigungsverwaltungsmodul (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vue-Komponentenkommunikation: Verwenden Sie $destroy für die Kommunikation zur Komponentenzerstörung Vue-Komponentenkommunikation: Verwenden Sie $destroy für die Kommunikation zur Komponentenzerstörung Jul 09, 2023 pm 07:52 PM

Vue-Komponentenkommunikation: Verwenden Sie $destroy für die Kommunikation zur Komponentenzerstörung. In der Vue-Entwicklung ist die Komponentenkommunikation ein sehr wichtiger Aspekt. Vue bietet verschiedene Möglichkeiten zur Implementierung der Komponentenkommunikation, z. B. Requisiten, Emit, Vuex usw. In diesem Artikel wird eine weitere Methode der Komponentenkommunikation vorgestellt: die Verwendung von $destroy für die Kommunikation zur Komponentenzerstörung. In Vue verfügt jede Komponente über einen Lebenszyklus, der eine Reihe von Lebenszyklus-Hook-Funktionen umfasst. Die Zerstörung von Komponenten gehört ebenfalls dazu

Wie implementiert Vue die Wiederverwendung und Erweiterung von Komponenten? Wie implementiert Vue die Wiederverwendung und Erweiterung von Komponenten? Jun 27, 2023 am 10:22 AM

Mit der kontinuierlichen Weiterentwicklung der Front-End-Technologie hat sich Vue zu einem der beliebtesten Frameworks in der Front-End-Entwicklung entwickelt. In Vue sind Komponenten eines der Kernkonzepte, mit denen Seiten in kleinere, besser verwaltbare Teile zerlegt werden können, wodurch die Entwicklungseffizienz und die Wiederverwendbarkeit des Codes verbessert werden. Dieser Artikel konzentriert sich darauf, wie Vue die Wiederverwendung und Erweiterung von Komponenten implementiert. 1. Vue-Komponenten-Wiederverwendungs-Mixins Mixins sind eine Möglichkeit, Komponentenoptionen in Vue zu teilen. Mit Mixins können Komponentenoptionen aus mehreren Komponenten optimal zu einem einzigen Objekt kombiniert werden

Vue-Praxis: Entwicklung von Datumsauswahlkomponenten Vue-Praxis: Entwicklung von Datumsauswahlkomponenten Nov 24, 2023 am 09:03 AM

Vue Practical Combat: Datumsauswahl-Komponentenentwicklung Einführung: Die Datumsauswahl ist eine Komponente, die häufig in der täglichen Entwicklung verwendet wird. Sie kann Daten einfach auswählen und bietet verschiedene Konfigurationsoptionen. In diesem Artikel wird erläutert, wie Sie mit dem Vue-Framework eine einfache Datumsauswahlkomponente entwickeln und spezifische Codebeispiele bereitstellen. 1. Anforderungsanalyse Vor Beginn der Entwicklung müssen wir eine Anforderungsanalyse durchführen, um die Funktionen und Eigenschaften der Komponenten zu klären. Gemäß den allgemeinen Funktionen der Datumsauswahlkomponente müssen wir die folgenden Funktionspunkte implementieren: Grundfunktionen: können Daten auswählen und

Vue-Komponentenkommunikation: Verwendung von Watch und Computing zur Datenüberwachung Vue-Komponentenkommunikation: Verwendung von Watch und Computing zur Datenüberwachung Jul 10, 2023 am 09:21 AM

Vue-Komponentenkommunikation: Verwendung von Watch und Compute zur Datenüberwachung Vue.js ist ein beliebtes JavaScript-Framework, dessen Kernidee die Komponentisierung ist. In einer Vue-Anwendung müssen Daten zwischen verschiedenen Komponenten übertragen und kommuniziert werden. In diesem Artikel stellen wir vor, wie man Vues Watch und Computing zum Überwachen und Reagieren auf Daten verwendet. watch In Vue ist watch eine Option, mit der Änderungen in einer oder mehreren Eigenschaften überwacht werden können.

So verwenden Sie Bibliotheken von Drittanbietern in Vue-Projekten So verwenden Sie Bibliotheken von Drittanbietern in Vue-Projekten Oct 15, 2023 pm 04:10 PM

Vue ist ein beliebtes JavaScript-Framework, das eine Fülle von Tools und Funktionen bietet, die uns beim Erstellen moderner Webanwendungen unterstützen. Obwohl Vue selbst bereits viele praktische Funktionen bietet, müssen wir manchmal Bibliotheken von Drittanbietern verwenden, um die Fähigkeiten von Vue zu erweitern. In diesem Artikel wird die Verwendung von Bibliotheken von Drittanbietern in Vue-Projekten vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Bibliotheken von Drittanbietern einführen Der erste Schritt zur Verwendung von Bibliotheken von Drittanbietern in einem Vue-Projekt besteht darin, sie einzuführen. Wir können es auf folgende Weise einführen

Umfassendes Verständnis des Komponentenlebenszyklus von Vue Umfassendes Verständnis des Komponentenlebenszyklus von Vue Oct 15, 2023 am 09:07 AM

Um den Komponentenlebenszyklus von Vue genau zu verstehen, benötigen Sie spezifische Codebeispiele. Einführung: Vue.js ist ein fortschrittliches JavaScript-Framework, das von Entwicklern wegen seiner Einfachheit, einfachen Erlernbarkeit, Effizienz und Flexibilität bevorzugt wird. Bei der Komponentenentwicklung von Vue ist das Verständnis des Lebenszyklus von Komponenten ein wichtiger Teil. Dieser Artikel befasst sich mit dem Lebenszyklus von Vue-Komponenten und stellt spezifische Codebeispiele bereit, um den Lesern zu helfen, diese besser zu verstehen und anzuwenden. 1. Lebenszyklusdiagramm von Vue-Komponenten Der Lebenszyklus von Vue-Komponenten kann als Komponenten betrachtet werden

Entwicklung von Vue-Komponenten: Implementierungsmethode für Registerkartenkomponenten Entwicklung von Vue-Komponenten: Implementierungsmethode für Registerkartenkomponenten Nov 24, 2023 am 08:41 AM

Entwicklung von Vue-Komponenten: Implementierungsmethode für Tab-Komponenten In modernen Webanwendungen ist die Tab-Seite (Tab) eine weit verbreitete UI-Komponente. Die Tab-Komponente kann mehrere verwandte Inhalte auf einer einzigen Seite anzeigen und diese durch Klicken auf die Registerkarte wechseln. In diesem Artikel stellen wir vor, wie man mit Vue.js eine einfache Tab-Komponente implementiert, und stellen detaillierte Codebeispiele bereit. Die Struktur der Vue-Tab-Komponente besteht normalerweise aus zwei Teilen: Tab und Panel. Etiketten werden zur Kennzeichnung von Oberflächen verwendet

Vue-Entwicklungshinweise: Umgang mit komplexen Datenstrukturen und Algorithmen Vue-Entwicklungshinweise: Umgang mit komplexen Datenstrukturen und Algorithmen Nov 22, 2023 am 08:08 AM

Bei der Vue-Entwicklung stoßen wir oft auf Situationen, in denen wir mit komplexen Datenstrukturen und Algorithmen zu tun haben. Diese Probleme können eine große Anzahl von Datenoperationen, Datensynchronisierung, Leistungsoptimierung usw. umfassen. In diesem Artikel werden einige Überlegungen und Techniken zum Umgang mit komplexen Datenstrukturen und Algorithmen vorgestellt, um Entwicklern dabei zu helfen, diese Herausforderungen besser zu bewältigen. 1. Auswahl von Datenstrukturen Beim Umgang mit komplexen Datenstrukturen und Algorithmen ist es sehr wichtig, geeignete Datenstrukturen auszuwählen. Vue bietet eine Fülle von Datenstrukturen und -methoden, und Entwickler können die geeignete Datenstruktur entsprechend den tatsächlichen Anforderungen auswählen. Häufig verwendete Zahlen

See all articles