Detaillierte Erläuterung des Vue-Identitätsauthentifizierungsmanagements und der Mandantenverwaltung

Detaillierte Erläuterung des Vue-Identitätsauthentifizierungsmanagements und der Mandantenverwaltung

Überblick

Die Entwicklung funktionaler Module ist oft am einfachsten, es ist jedoch nicht einfach, auf jedes Detail einzugehen. Nehmen wir als Beispiel das Modul zur Verwaltung der Identitätsauthentifizierung. Es scheint sehr einfach zu sein, da die Backend-Schnittstellen alle in der ABP-Vorlage vorgefertigt sind und der Frontend-Teil nichts weiter ist als das Schreiben von Schnittstellen, das Aufrufen von Schnittstellen und das Binden von Daten. Wenn Sie sich jedoch den Code der ABP-Angular-Version ansehen, werden Sie feststellen, dass es tatsächlich viele Details gibt, mit denen man sich befassen muss.

Zurück zu Vue. Da der Front-End-Teil zu viele Codedateien enthält, werden im Folgenden nur einige Details aufgeführt, die beachtet werden müssen. Andere Dinge wie Vue-Komponenten, Tabellen, Formulare, Datenbindung, Schnittstellenanforderungen usw. sind eigentlich fast gleich und werden hier nicht erwähnt.

Berechtigungen auf Schaltflächenebene

Im vorherigen Kapitel haben wir die Steuerung der Menüberechtigungen implementiert. Das gleiche Prinzip gilt für Schaltflächenberechtigungen. Bestimmen Sie, ob abpConfig.auth.grantedPolicies eine bestimmte Berechtigung enthält, und verwenden Sie dann das v-if-Rendering in der Komponente.

src\utils\abp.js:

Exportfunktion checkPermission(Richtlinie) {
  const abpConfig = store.getters.abpConfig;
  wenn (abpConfig.auth.grantedPolicies[Richtlinie]) {
    gibt true zurück;
  } anders {
    gibt false zurück;
  }
}

src\views\identity\roles.vue:

<el-Schaltfläche
  Klasse="Filterelement"
  Stil="Rand links: 10px;"
  Typ="primär"
  Symbol="el-icon-edit"
  @click="handleErstellen"
  v-if="checkPermission('AbpIdentity.Roles.Erstellen')"
>
  {{ $t("AbpIdentity['NewRole']") }}
</el-button>

Identitätsauthentifizierungsverwaltung

Ich werde nicht auf das Hinzufügen, Löschen, Ändern und Überprüfen von Rollen und Benutzern eingehen, sondern hier müssen wir auf die Berechtigungsverwaltung achten. Sowohl Benutzer als auch Rollen benötigen eine Berechtigungsverwaltung, die in der ABP Angular-Version ein unabhängiges Berechtigungsverwaltungsmodul ist. Ich behandle es hier auch als öffentliche Komponente und unterscheide es nach Providername. „R“ ist die Rollenberechtigung und „U“ ist die Benutzerberechtigung.

R/U-Berechtigungen

Es gibt einen kleinen Unterschied zwischen ihnen. Benutzerberechtigungen können aus Rollenberechtigungen stammen, daher müssen die Berechtigungen im Benutzer zeigen, von welchem ​​ProviderName und ProviderKey sie stammen. Wenn sie von anderen Providern stammen, sind sie deaktiviert und können nicht geändert werden.

src\views\identity\components\permission-management.vue:

<el-form label-position="oben">
  <el-tabs tab-position="links">
    <el-tab-pane
      v-for="Gruppe in PermissionData.groups"
      :Schlüssel="Gruppenname"
      :label="Gruppe.Anzeigename"
    >
      <el-form-item :label="Gruppe.displayName">
        <el-Baum
          ref="Berechtigungsbaum"
          :data="transformPermissionTree(Gruppe.Berechtigungen)"
          :props="BaumStandardProps"
          Kontrollkästchen anzeigen
          streng prüfen
          Knotenschlüssel="Name"
          Standardmäßig alles erweitern
        />
      </el-form-item>
    </el-tab-pane>
  </el-tabs>
</el-form>
transformPermissionTree(Berechtigungen, Name = null) {
  sei arr = [];
  wenn (!Berechtigungen || !Berechtigungen.some(v => v.parentName == name))
    Rückflug an;
  const Eltern = Berechtigungen.Filter(v => v.parentName == Name);
  für (lass i in Eltern) {
    lass label = '';
    wenn (this.permissionsQuery.providerName == "R") {
      label = Eltern[i].displayName;
    } sonst wenn (this.permissionsQuery.providerName == "U") {
      Bezeichnung =
        Eltern[i].displayName +
        " " +
        Eltern[i].grantedProviders.map(Anbieter => {
          gibt `${provider.providerName}: ${provider.providerKey}` zurück;
        });
    }
    arr.push({
      Name: Eltern[i].Name,
      Etikett,
      deaktiviert: this.isGrantedByOtherProviderName(
        Eltern[i].grantedProviders
      ),
      Kinder: this.transformPermissionTree(Berechtigungen, Eltern[i].Name)
    });
  }
  Rückflug an;
},
isGrantedByOtherProviderName(gewährteAnbieter) {
  wenn (gewährteAnbieter.Länge) {
    zurückkehren (
      grantedProviders.findIndex(
        p => p.Anbietername !== this.Berechtigungsabfrage.Anbietername
      ) > -1
    );
  }
  gibt false zurück;
}

Berechtigungsaktualisierung

Darüber hinaus gibt es ein Detailproblem: Wenn die geänderten Berechtigungen den aktuellen Benutzer betreffen, wie können sie dann sofort wirksam werden?

src\views\identity\components\permission-management.vue:

updatePermissions(this.permissionsQuery, { permissions: tempData }).dann(
  () => {
    this.dialogPermissionFormVisible = false;
    dies.$benachrichtigen({
      Titel: this.$i18n.t("HelloAbp['Success']"),
      Nachricht: this.$i18n.t("HelloAbp['SuccessMessage']"),
      Typ: „Erfolg“,
      Dauer: 2000
    });
    fetchAppConfig(
      diese.permissionsQuery.providerKey,
      this.permissionsQuery.providerName
    );
  }
);

src\utils\abp.js:

Funktion shouldFetchAppConfig(Anbieterschlüssel, Anbietername) {
  const currentUser = store.getters.abpConfig.currentUser;

  wenn (Anbietername === "R")
    gibt currentUser.roles.some zurück (Rolle => Rolle === Anbieterschlüssel);

  wenn (Anbietername === "U") aktuelleBenutzer-ID === Anbieterschlüssel zurückgibt;

  gibt false zurück;
}
Exportfunktion fetchAppConfig(Anbieterschlüssel, Anbietername) {
  wenn (shouldFetchAppConfig(providerKey, providerName)) {
    store.dispatch("app/applicationConfiguration").dann(abpConfig => {
      Router zurücksetzen();

      store.dispatch("Benutzer/SetRoles", abpConfig.currentUser.roles);

      const grantedPolicies = abpConfig.auth.grantedPolicies;

      // Karte zugänglicher Routen basierend auf grantedPolicies erstellen
      speichern
        .dispatch("Berechtigung/Routen generieren", gewährteRichtlinien)
        .then(accessRoutes => {
          // barrierefreie Routen dynamisch hinzufügen
          router.addRoutes(Zugriffsrouten);
        });

      // besuchte Ansichten und zwischengespeicherte Ansichten zurücksetzen
      //store.dispatch("tagsView/delAllViews", null, { root: true });
    });
  }
}

Dabei sind viele Dinge zu beachten, beispielsweise lässt sich die Rolle mit isStatic===true nicht löschen und der Name nicht verändern; die Passwort-Verifizierungsregeln zum Anlegen neuer Benutzer und Bearbeiten von Benutzern müssen unterschiedlich gehandhabt werden; und auch die Speicherberechtigungen werden unterschiedlich gespeichert. usw. . . Wenn du die Voraussetzungen hast, kannst du dir den Angular-Code von ABP anschauen.

Mieterverwaltung

Die grundlegenden Funktionsschnittstellen sind ähnlich. . . Es gibt jedoch eine Option zum „Verwalten von Funktionen“, und dort wird standardmäßig „Keine Funktionen verfügbar“ angezeigt:

Es gibt in der Benutzeroberfläche keine Möglichkeit, dieses Element hinzuzufügen oder zu löschen, aber diese Funktion ist recht praktisch. Es stammt aus dem FeatureManagement-Modul von ABP, auch bekannt als „Feature Management“, das später vorgestellt wird.

Mieterwechsel

Nach Abschluss der Mandantenverwaltung sollte es Ihnen beim Anmelden möglich sein, den Mandanten zu wechseln.

Das Wechseln von Mandanten ist relativ einfach. Sie müssen lediglich die Mandanten-ID basierend auf dem eingegebenen Mandantennamen abrufen, dann die Schnittstelle /abp/application-configuration aufrufen und die Mandanten-ID in das Feld __tenant des Anforderungsheaders einfügen. Dieser Parameter ist auch in nachfolgenden Anforderungen erforderlich. Wenn er nicht übergeben wird, wird der Standardhost verwendet.

Tatsächlich kann das ABP-Backend so konfiguriert werden, dass mehrere Mandanten möglich sind. Hier können Sie auch die Schaltfläche zum Umschalten des Mandanten entsprechend der Backend-Konfiguration anzeigen oder ausblenden. Im Vergleich zur ABP-Vorlage fehlt in der Login-Oberfläche noch ein Registrierungszugang, dieser wird jedoch später ergänzt.

Wirkung

endlich

Auf die Modulentwicklung des Frontend-Teils wird nicht näher eingegangen, das Thema ist weiterhin ABP. Zu diesem Zeitpunkt sind die Front-End-Funktionen der ABP-Vorlage fast vollständig. Wenn Sie den Code benötigen, können Sie ihn unter https://github.com/xiajingren/HelloAbp abrufen. Später werde ich die Dateien organisieren und eine saubere Vue-Version erstellen.

Oben finden Sie eine ausführliche Erläuterung der Identitätsauthentifizierungsverwaltung und Mandantenverwaltung von Vue. Weitere Informationen zur Identitätsauthentifizierungsverwaltung und Mandantenverwaltung von Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So implementieren Sie die JWT-Authentifizierung im Vue-Routing
  • Vollständige Schritte für dynamische Bindungssymbole in Vue
  • Benutzerdefinierte Vue-Komponenten verwenden Ereignismodifikatoren, um auf den Pit-Rekord zu treten
  • Grundlegende Anwendungsbeispiele für benannte Slots in Vue
  • Vue-Anfängerhandbuch: Erstellen des ersten Vue-cli-Scaffolding-Programms
  • Vue implementiert Beispielcode für Links- und Rechtsgleiteffekte
  • Implementierung der Kommunikation zwischen Vue und Flask
  • Vue implementiert bidirektionale Datenbindung
  • Erste Schritte mit benutzerdefinierten Anweisungen in Vue 3.0

<<:  So mounten Sie eine Festplatte in Linux

>>:  So installieren Sie MySQL 5.7 unter Windows

Artikel empfehlen

Vorgehensweise, wenn die Online-MySQL-Auto-Increment-ID erschöpft ist

Inhaltsverzeichnis Tabellendefinition - automatis...

Tiefgreifendes Verständnis der Vue-cli4-Routing-Konfiguration

Inhaltsverzeichnis Vorwort - Vue Routing 1. Die g...

Befehl zum Entfernen (Löschen) eines symbolischen Links in Linux

Möglicherweise müssen Sie in Linux manchmal symbo...

HTML-Kommentare Symbole zum Markieren von Textkommentaren in HTML

HTML-Kommentare: Wir müssen häufig einige HTML-Ko...

So überwachen und löschen Sie abgelaufene Sitzungen in Tomcat

Vorwort Ich habe zufällig entdeckt, dass die halb...

Detaillierte Erläuterung des Lernens von CSS-Zählerattributen

Das CSS-Zählerattribut wird von fast allen Browse...

Beispiel für das Hinzufügen eines Musikvideos zu einer HTML-Seite

1. Video-Tag Unterstützt die automatische Wiederg...

Tutorial zur Installation und Verwendung des Elasticsearch-Tools cerebro

Cerebro ist eine Weiterentwicklung des Elasticsea...

Verwenden Sie CSS, um ein Datei-Upload-Muster zu zeichnen

Wenn Sie es wären, wie würden Sie es erreichen, w...

So konfigurieren Sie Http, Https, WS und WSS in Nginx

Vorne geschrieben Im heutigen Internetbereich ist...

Ursachenanalyse und Lösung des E/A-Fehlers beim Löschen einer MySQL-Tabelle

Problemphänomen Ich habe kürzlich Sysbench verwen...

Detaillierte Zusammenfassung häufig verwendeter MySQL-Funktionen

Inhaltsverzeichnis Allgemeine MySQL-Funktionen 1....