2017-02-12 4 views
1

Eine Anwendung, die Objekte (z. B. Filme) nach bestimmten Benutzerberechtigungen zeigt. Die allgemeine Berechtigung zum Anzeigen oder Erstellen von Objekten ist als RBAC mit Rollen und Berechtigungen implementiert. Die spezifische Berechtigung zum Zugriff auf ein Objekt mit bestimmten Attributen (z. B. ein Film mit dem Attribut "Drama") sollte mit Mitgliedschaften implementiert werden Das heißt, das Objekt hat nicht die Eigenschaft "Drama", es ist ein Mitglied der Gruppe "Drama". Wenn der Benutzer und das Objekt Mitglieder derselben Gruppe sind, verfügt der Benutzer über die entsprechende Berechtigung zum Zugriff auf dieses Objekt. Es kann verschiedene Gruppen zum Anzeigen, Erstellen oder Löschen eines Objekts geben, z. B. eine einfache Viewer-Gruppe oder eine Art Editor-Gruppe. Außerdem gibt es eine Tabelle, die angibt, welche Gruppentypen für bestimmte Aktionen an bestimmten Objekten relevant sind. Relevante Gruppen für die Aktion "Show" auf dem Objekt "Film" könnten beispielsweise "Genre" und "Alter" sein (Eignung des Films für bestimmte Zielgruppen).Zugriffskontrolle: RBAC mit zusätzlichen Gruppenmitgliedschaften anstelle von Objekteigenschaften

Der Grund, es in der beschriebenen Weise zu implementieren, ist eine große Flexibilität, ohne den Code zu berühren. Änderungen an Gruppen können in der Datenbank verarbeitet werden.

Allgemeine Datenbank-Design:

design

Beispiel: Der Film "The Revenant" ist ein Mitglied der Gruppen "Genre: Drama" und "Alter: 18". Der Benutzer kann darauf zugreifen, wenn er auch Mitglied dieser Gruppen ist.

example

Klingt das wie ein guter Ansatz? Gibt es Lösungen, die diesem Ansatz ähnlich sind? Hat es große Nachteile (z. B. zu viele Datenbankabfragen - es können täglich mehrere hundert Benutzer vorhanden sein)?

Bitte teilen Sie Ihre Gedanken zu diesem Thema mit mir - die Wahl von "Drama" als Kategorie für das Beispiel ist kein Zufall;) Ich weiß nur nicht, ob dies eine Sackgasse oder wenn ich in die richtige Richtung bin . Ich blieb an diesem Punkt für eine ganze Weile stecken.

+0

BTW nur ​​diese Antwort realisiert kann auch nützlich sein: http://stackoverflow.com/questions/30701482/mysql-access-control –

+0

thx für die schnelle Antwort :) Ich brauche etwas Zeit, um einen tieferen Einblick in Ihre Vorschläge zu haben. – NedRise

Antwort

0

Mindestens Sie haben einen guten Sinn für Humor :-)

Ihr Ansatz gut anhört. Solange Sie die Anzahl der Parameter niedrig halten, können Sie mit rollenbasierter Zugriffskontrolle (RBAC) und einigen zusätzlichen Parametern, z. Gruppenmitgliedschaft.

Aber auf lange Sicht, wenn Sie business-driven Autorisierung (Zugriffskontrolle) implementieren möchten, benötigen Sie eine Möglichkeit, dies unabhängig von Ihrem Code zu tun: Sie möchten nicht Ihren App-Code jedes Mal neu schreiben ist eine Änderung der Anforderungen.

Zu diesem Zweck gibt es ein Zugriffskontrollmodell namens Attributbasierte Zugriffskontrolle (ABAC), mit dem Sie Ihre Autorisierungsrichtlinien unabhängig von Ihrem Code definieren können.

In ABAC, haben Sie folgende Konzepte:

  • eine Architektur, die einen Policy Enforcement Point (PEP) und einen Strategieentscheidungspunkt (PDP) definiert. Das PEP befindet sich vor (oder innerhalb) Ihrer App. Es fängt die Geschäftsanforderungen ab (z. B. eine Anforderung zum Anzeigen eines Films) und sendet eine Autorisierungsanforderung an die PDP.Der PDP ist mit Richtlinien konfiguriert. Basierend auf der Anfrage wird der PDP eine Entscheidung treffen: entweder Ja, Genehmigen oder Nein, Verweigern.
  • eine Richtliniensprache: Die Richtliniensprache ist attributbasiert (daher der Name ABAC). Dies bedeutet, dass Sie beliebig viele Attribute verwenden können (z. B. Benutzerrolle, Benutzer-ID, Benutzergruppenmitgliedschaften, aber auch Alter des Benutzers, Benutzerstandort, Benutzerabonnement sowie Ressourcenattribute wie Filmbewertung, Filmkategorie, Filmpreis ...).)
  • ein Anfrage/Antwort-Schema: So fragen Sie nach Autorisierung. Es ist im Wesentlichen ein Ja/Nein-Fluss. "Kann ein Benutzer X?", "Ja, sie können."

Es gibt mehrere Implementierungen von ABAC da draußen - einige davon sind Framework-spezifisch, z. CanCanCan. XACML und ALFA sind zwei Ansätze, die nicht an ein bestimmtes Framework gebunden sind.

  • Open Source: SunXACML, ATT XACML
  • Gewerbe: Sie können von Open Source und kommerziellen Implementierungen von jeder Sprache zB wählen Axiomatics Policy Server
+0

Andere Open-Source-Alternativen auf der XACML [Wikipedia-Seite] (https://en.wikipedia.org/wiki/XACML#XACML_Implementations) wie AuthzForce oder WSO2 Balana. – cdan