MongoDB + Node JS + Role Based Access Control (RBAC)
Lerne zurzeit MEINE Stapel, die Entwicklung einer einfachen TODO-app und umsetzen wollen, Role Based Access Control (RBAC) für, die. Wie richte ich die Rollen & Berechtigung für MongoDB.
Ich soll 3 Rollen (Rollen sind vielleicht komisch Aussehen aber das ist rein, um zu lernen) :
- GOTT
- SUPER HERO
- MANN
GOTT - ähnlich wie super-admin, kann nichts tun, in der Anwendung. C,R,U,D die Berechtigungen für Aufgaben und für andere Nutzer auch. Erstellen können Sie eine TODO - & weisen Sie jedem SUPER-HELD oder der MENSCH direkt. Aktualisieren oder Löschen einer Aufgabe oder einen Benutzer an einem beliebigen Punkt in der Zeit.
SUPER HERO - ähnlich wie admin, hat super power zu tun, alles auf seine persönlichen Daten, C,R,U,D für Aufgaben. Nicht erstellen kann der Benutzer. Nur Lesen & Kommentare hinzufügen für Aufgaben, die von GOTT geschaffen & ihm zugeordnet.
MANN - Kann nur Lesen und Kommentare hinzufügen, um Aufgaben ihm zugeordnet.
Um es zusammenzufassen :
GOD - C,R,U,D [Global Level]
SUPER HERO - C,R,U,D [Private] + R,U [Assigned to him]
MAN - R,U [Assigned to him]
Ich verstehe, dass ich brauche, um BENUTZER & ROLLEN-Sammlungen. Wo die ROLLEN inturn sollten BERECHTIGUNGEN etc. Wie kann ich Draht Sie alle ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich mag Namen gegeben, Sie zu Rollen GOTT, SUPER-HELDEN & MANN, leicht zu verstehen.
Als Sie über MEINE Stapel und vieles Routen-Validierung geschieht auf
node
ich würde lieber halten der Rollen-Tabelle einfach.Rollen :
Benutzer :
Wenn der Benutzer sich anmeldet, und senden
user
Objekt zurück zum client, stellen Sie sicher, Sie zu ersetzenroleId
mit entsprechendenrole
Objekt aus der DB.Kommen, um code auf Node JS :
Vollständig verstehen Ihren Anwendungsfall können wir teilen Sie in folgende Methoden -
CreateUser
CreateTodo
DeleteTodo
ReadTodo
CommentTodo
AssignTodo
Lets go, Schritt für Schritt, CreateUser.
Routen code-snippet :
In Ihrem Controller können Sie überprüfen, basiert auf der Eingabe
globalPerms
, wenn validierte ermöglichen zu erstellen, die Benutzer durch den Aufrufnext()
sonstreturn
mit der entsprechenden Fehlermeldung.Nun CreateTodo && DeleteTodo :
Beide ziemlich viel Arbeit auf gleiche Logik mit einem kleinen trick.
Routen code-snippet :
Für die Erstellung einer Todo,
globalPerms
sind mit GOTT &privatePerms
sind mit SUPER HERO, die beide von Ihnen können zugelassen werden.Trick, hier wird in
todos.delete
Methode, nur damituser.id === todos.createById
sonst SUPER HELD kann gehen, um zu löschen Todos, die von GOTT geschaffen.ReadTodo :
Wenn ein TODO erstellt wird, sollte es eine
createById
gespeichert, ebenso wenn ein TODO zugeordnet ist jemand dannassignedTo
undassignedBy
sollte aufgenommen werden, auch.Dies macht viel anderen Operationen leicht zu handhaben.
user.role.globalPerms
- geben GOTT alle TODO ' s Daten.user.role.privatePerms
- geben Sie Aufgaben, die entweder createdBy ihm/Ihr oder ihm zugeordnet.user.role.globalPerms === undefined && user.role.privatePerms === undefined
- Ihren MANN und geben Aufgaben, die nur assignedTo ihn.UpdateTodo & CommentTodo :
Dies ist eine exakte Replik von dem, was ReadTODO nicht so DIY -
Letzte, AssignTodo :
Einfache, die
loggedInUser.id === todos.createdById
dann kann er zuordnen, es niemandem.Zwei Dinge zu beachten hier :
Zuordnung Teil geschieht meist auf UI-Elemente (Winkel -) vor, ich gegeben haben, das Konzept zu überprüfen
loggedInUser.id === todos.createdById
. Angemeldete Benutzer alle Möglichkeiten sehen, wie alle TODO ' s durch gelesen, Betrieb und zuordnen können es jedem, der er/Sie mag.Stellen Sie sicher, dass eine SUPER HERO kann nur weisen Sie eine TODO-sich selbst oder anderen SUPER-HELD oder ein MANN, aber nicht GOTT. Zeigen, wie Sie Zuweisen Optionen in der Benutzeroberfläche vor, liegt außerhalb des Rahmens dieser Frage. Dies ist nur ein heads-up.
Ich hoffe, das war klar.
ANMERKUNG : Es gab keine Notwendigkeit zu geben, die Berechtigungen zu den MENSCHEN in Rollen Sammlung & wir haben es geschafft alle möglichen Operationen mit sich, dass.
Dies ist eine sehr umfassende Frage, die gelöst werden können, in vielerlei Hinsicht.
Die Sie Hinzugefügt haben, die Sie mit MEAN-stack daher werde ich einschränken, meine Frage.
Eine Sache, die man noch nicht einbezogen in die ganze Frage ist, welche Art der Authentifizierung Architektur, die Sie verwenden. Lassen Sie uns sagen, Sie verwenden token-basierte Authentifizierung, in der Regel Menschen in diesen Tagen verwenden.
Wir haben 3 Arten von Benutzern.
Sie haben verschiedene Optionen zur Verfügung, um zu differenzieren zwischen der Art des tokens als gut.
Den verschlüsselten token-Typ des Nutzers sowie usw.. (Dieses wird in handliches kommen, wenn Sie nicht brauchen, um zu speichern-Token auf das backend haben, können Sie nur entschlüsseln und prüfen)
Nun, bevor alle Benutzer-Eintrag Benutzer-spezifische route, stellen Sie sicher, dass Sie die überprüfung der token-ersten.
Beispiel
Müssen Sie die senden-token im header von Winkel-und dann können Sie die Daten aus dem header und dann können Sie überprüfen, ob, dass bestimmte Benutzer die Berechtigung hat, um durch zu gehen, die route oder nicht.
Lassen Sie uns sagen, ein Gott-level-Benutzer angemeldet ist, dann hat er die godleveltoken mit ihm, und wir werden überprüfen, bevor Sie es ihm ermöglichte, Zugang, route, oder sonst können Sie nur Fehlermeldung anzeigen.
Dies kann Ihre Probe token überprüfung der Funktion auf dem server Ende
Knoten Modul-Vorschlag : https://www.npmjs.com/package/jsonwebtoken
Kommen wir nun zu den frontend-Teil. Sie sind mit eckigen basierend auf dem, was Sie geschrieben haben, können Sie das token herausfindet, bevor zeigt keine Seite an.
Können Sie gehen Sie durch diesen blog, um eine bildliche Darstellung von dem, was ich versucht habe zu erklären. Klicken Sie Hier
Mögliche Ansatz-> haben, die Rolle, die eingebettet in der user-Auflistung/schema:
Benutzer-Dokument gelten die folgenden:
Als Sie in Ihrem post beschreibt, kann nur Gott machen, und weisen Sie Aufgaben.
Rollen Sammlung kann halten Sie die folgenden:
Node JS Middlewares
Nachdem man die richtige Berechtigung Werte für einen Benutzer, die Sie möglicherweise verwenden möchten middlewares.
Beispiel-express-HTTP-request-route:
};
Berechtigungen.überprüfen Sie aufgerufen wird, bevor tatsächlich ausgeführten Funktion Körper, um die update-TODO.
Daher, wenn ein Benutzer versucht, ein update todo, wird es zuerst überprüfen Sie die entsprechenden Berechtigungen.