Wir sind auch nicht auf Segel-Berechtigungen angewiesen. In unserer App können Nutzer Mitglieder mehrerer Organisationen sein.
Wir verwenden auth0 für alle Authentifizierungsaktivitäten, d. H. Jede Anfrage muss eine JWT enthalten, die im Anforderungsheader enthalten ist. Der JWT enthält userId, orgId und role.
Sails-Richtlinien dekodieren den JWT und hängen userId, orgId und role an das req-Objekt für alle späteren Überprüfungen an.
Jedes Modell hat die Eigenschaft orgId - wir verwenden MongoDB. Jeder Controller, jede DB-Operation usw. fügt diese verifizierte orgId der Abfrage hinzu. Tatsächlich haben wir eine kleine Pipeline, die die Abfrage vorbereitet: Wir fügen die orgId hinzu, in Aktualisierungsfällen filtern wir unerwünschte Eigenschaftsaktualisierungen aus usw.
Dieser Ansatz erfordert keine zusätzlichen db-Aufrufe für die Trennung von Mandanten.
Einige Modelle haben spezifische Zugriffsanforderungen für einzelne RECORD. Hier speichern wir die Eigenschaften von allowedUser (eine für das Lesen, eine für die Aktualisierung usw.) auf genau diesem Datensatz und wir erweitern die Abfrage noch einmal, so dass nur Datensätze zurückgegeben oder aktualisiert werden oder Xyz, wo der aktuelle Benutzer in der anwendbaren allowedUsers-Eigenschaft enthalten ist.
Dieser Ansatz erfordert auch keine zusätzlichen db-Aufrufe. Dies nutzt jedoch MongoDB-spezifische Abfragefunktionen.
Wir haben derzeit keine ACL-ähnliche Anforderungen, die zwischen den beiden oben beschriebenen Ansätzen (Re Access Control Granularity) richtig wäre.
_ "Jedes Modell hat die Eigenschaft orgId - wir verwenden MongoDB. Jeder Controller, db-Vorgang usw. fügt diese verifizierte orgId zur Abfrage hinzu. Tatsächlich haben wir eine kleine Pipeline, die die Abfrage vorbereitet: wir fügen die orgId in update hinzu Fälle filtern wir unerwünschte Eigenschaft Updates, etc. "_ Jede Chance, die Sie ein Beispiel dafür geben können, wie Sie dies in .Find() usw. injizieren? – user1885523