Frage

Ich bin Teil eines Teams erstellen einer web-Anwendung mit PHP und MySQL.Die Anwendung wird über mehrere Benutzer mit unterschiedlichen Rollen.Die Anwendung wird auch verwendet werden in einer geografisch verteilten Art und Weise.Entsprechend müssen wir eine access control system, die arbeitet auf die folgenden zwei Ebenen:

  1. Steuert Benutzer Berechtigungen für bestimmte php-Seiten, d.h.bietet oder verweigert den Zugriff auf bestimmte Seiten (oder Elemente) basiert auf der Rolle des Benutzers.Zum Beispiel:ein Benutzer kann Zugriff auf den "Studenten" Seite, nicht aber der "Lehrer" - Seite.
  2. Steuert Benutzer Berechtigungen für bestimmte Datensätze in einer Datenbank, d.h.ändert Datenbank-Abfragen, sodass nur bestimmte Datensätze angezeigt werden.Für Beispiel, für einen Benutzer auf Ebene der Stadt, werden nur die Datensätze angezeigt werden sollen, die sich auf die konkrete Stadt, während für einen Benutzer auf nationaler Ebene, Aufzeichnungen für ALLE STÄDTE im Land sollte angezeigt werden.

Ich brauche Hilfe auf und entwerfen ein system, dass kann Griff diese beiden Arten von access control.Punkt Nr.1 zu sein scheint, einfach genug.Aber ich bin völlig ratlos, wie Punkt Nummer 2 ohne hardcoding die Informationen in den SQL-Abfragen.

Jede Hilfe würde geschätzt werden.

Vielen Dank im Voraus

Vinayak

War es hilfreich?

Lösung

Ich war in der ähnlichen situation wie vor einigen Monaten.Ich fand, dass tools wie Zend_ACL Arbeit toll, wenn Sie nur check access level single-item (oder relativ geringen Anzahl von Ihnen).Es schlägt fehl, wenn Sie brauchen, um eine riesige Liste der Elemente, die die Benutzer zugreifen darf.Ich gestaltete benutzerdefinierte Lösung für dieses problem mit Business Delegate Muster.BD bietet von business-Logik, die angewendet werden können in spezifischen Kontext.In diesem Szenario wird eine SQL-Logik geliefert wurde, und verwendet für Filterung Zustand in der untergeordneten select-Anweisung.Siehe die folgenden Diagramme:

alt text
(Quelle: epsi.pl)

Und Sequenz-Diagramm, das zeigt Anrufe um:

alt text
(Quelle: epsi.pl)

Ich bloggte über diese Lösung, leider, es ist alles in Polnisch, aber Sie können finden, Teile des Codes und Diagramme nützlich.Was ich sagen kann, die Umsetzung ist nicht ein Stück Kuchen, aber performance-wise, es ist ein Meister, wenn im Vergleich zu iterativen access-überprüfung für jedes element auf der Liste.Außerdem, die Infrastruktur, die oben behandelt, nicht nur eine Art von Elementen in der Liste.Es kann dazu dienen, wenn Zugriff auf verschiedene Listen, werden Sie Liste der Städte, Länder, Produkte oder Dokumente, so lange wie die Elemente der Liste implementieren IAuthorizable Schnittstelle.

Andere Tipps

Sie über die Details des Problems nicht kennen, aber das Zend Framework hat ein ziemlich potent ACL und AUTH Reihe von Komponenten, die Sie möchten, betrachten. Gute Sachen wie sehr präzise Zugriffskontrolle, die Speicherung von Daten für persistance, erweitern bedingte Regeln.

Es scheint mir, wie das, was Sie brauchen, ist dies: (Ich werde ein Land / Bundesland / Stadt Beispiel verwenden)

  1. Eine Liste aller Länder. Jedes "Land" hat eine ID.
  2. Eine Liste aller Staaten innerhalb der einzelnen Länder. Jeder Staat wird auf die ID des coutnry gebunden, sondern hat auch seine eigene eindeutige ID.
  3. Eine Liste aller Städte. Jede Stadt ist verpflichtet, entweder auf einem Zustand, oder direkt in ein Land, und hat eine Flagge, um anzuzeigen, welche.

Für eine Stadt Benutzer suchen offensichtlich für und in die Stadt betreffen nur die Datensätze angezeigt, die ihre ID übereinstimmt. obwohl für einen Staat oder nationaler Ebene, Suche für alle Datensätze zu jeder Stadt betreffen, die eine ID hat diese Nation Anpassung (oder Zustand oder was Sie haben).

Also im Grunde jede Untergruppe ist abhängig von der Gruppe darüber, und obwohl ich mich nicht erinnern, richtig, ich glaube, Sie Unterabfragen verwenden können von dort den Trick zu tun.

Wenn Sie nicht wissen, wie dies zu tun wäre ich einen PHP-Framework wie Zend Framework, CakePHP oder Symphony verwenden. Sie haben die schwere Arbeit für Sie getan und eine Art von Zugangskontrollschema haben bereits vorhanden.

Ich habe ähnliche Lösung zu bauen und so weit habe ich beschlossen, Spezifikationen und Rollen zu verwenden, so in der Tat eine Rolle einig Privileg Spezifikationen angebracht hat. Wenn sie alle erfüllt sind, wird die Erlaubnis erteilt, sonst -. Es zurück auf die Ressource Standardzugriffs fällt

Ich war auf der Suche über jemanden zu finden, bereits die Implementierung der Lösung, aber es scheint niemand tat. Lassen Sie uns hoffen, dass es nicht scheitern sein:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top