Ich benutze nodejs und habe die acl / authorization für die letzte Woche untersucht. Ich habe nur ein paar gefunden, aber keines scheint alle Funktionen zu haben, die ich brauche. Das nächstgelegene war Ссылка , aber ich denke nicht, dass es das Schützen von Ressourcen nach ID unterstützt (zum Beispiel, wenn ich Benutzern erlauben wollte 12345 und nur Benutzer 12345, um auf Benutzer / 12345 / edit zuzugreifen). Daher denke ich, dass ich eine individuelle Lösung für mich selbst machen muss.
Meine Frage dazu lautet: Welche Vor- und Nachteile birgt das Speichern von Rollen (Benutzer, Administrator, Moderator usw.) unter jedem Benutzerobjekt, im Gegensatz zum Erstellen einer anderen Sammlung / Tabelle, die jeden Benutzer mit ihrem Benutzer abbildet Autorisierungsregeln? node_acl verwendet eine separate Sammlung, während die meisten anderen vom Rollen-Array in Benutzerobjekten abhängen.
Übrigens verwende ich Mongodb im Moment. Allerdings habe ich noch nicht über die Vor- und Nachteile der Verwendung von relationalen und nichtrelationalen Datenbanken für die Authentifizierung geforscht, also lassen Sie mich wissen, ob Ihre Antwort davon abhängt.
Als ich das eintippte, dachte ich an eine Sache. Wenn ich Rollen in einer separaten Sammlung speichere, ist sie tragbarer. Ich könnte das acl-System viel leichter austauschen. (Ich denke?)
Die Frage scheint hier von "wo sollte ich meine Rollen speichern?" zu abstrahieren, "wie sollte ich verwandte Informationen in Mongo (oder NoSQL im Allgemeinen) speichern". Es ist ein relation vs. nicht-relationales Modellierungsproblem.
Nicht-relational
Mit Knoten + Mongo wird es beim Speichern der Rollen für den Benutzer sehr einfach möglich, festzustellen, ob ein Benutzer Zugriff auf die Funktion hat, da Sie nur in der Eigenschaft 'Rollen' nachsehen können. Der Nachteil ist, dass Sie viele doppelte Informationen haben ("user_read" könnte eine Rolle in jedem Benutzerkonto sein) und wenn Sie diese Eigenschaft ändern, müssen Sie sie innerhalb von jedes Benutzerobjekt.
Sie können die Rollen in einer eigenen Sammlung speichern und dann die ID für diesen Eintrag in der Roles-Sammlung Ihres Benutzermodells speichern. Sie müssen jedoch den aktuellen Datensatz aus der Sammlung abrufen, um alle Informationen anzuzeigen (obwohl dies wohl selten vorkommt)
Relational
Das Speichern in einem relationalen DB wäre ein eher "traditioneller" Ansatz, da Sie die Beziehungen zwischen den Tabellen herstellen können (über FKs / Join-Tabellen oder was nicht). Diese kann eine gute Lösung sein, aber dann haben Sie nicht mehr die Vorteile einer NoSQL-Datenbank.
Zusammenfassung
Wenn der Rest Ihrer App in Mongo gespeichert ist und hat , um dort zu bleiben (für Leistung oder andere Einschränkungen), dann sind Sie wahrscheinlich besser dran, alles in Mongo zu tun. Die meisten Ratschläge, auf die ich gestoßen bin, sagen, vermischen & amp; Datenspeicher abgleichen, z.B. benutze das eine oder das andere, aber nicht beides. Davon abgesehen habe ich Projekte mit beiden gemacht und es kann chaotisch werden, aber manchmal überwiegen die Vorteile die Nachteile.
Ich mag die Antwort von @DavidWelch, aber ich möchte die Frage aus einer anderen Perspektive betrachten, weil die erwähnte Bibliothek die Option bietet, einen anderen Datenspeicher vollständig zu verwenden.
Rollen in einem separaten Datenspeicher speichern:
Allgemeine Hinweise:
Ich hoffe, das hat geholfen.