2009-02-13 13 views
6

Ich habe über den Web-App denke, ich bin beginnen Entwicklung und fragen, ob mein üblicher Ansatz verbessert werden könnte.Wie sollte ich meine ACL in einer Webanwendung implementieren?

In meinen letzten Apps habe ich eine Tabelle (siehe unten) von Rollen (wie CREATE POST, EDIT POST usw.) erstellt, auf die jeweils ein Bitfeld angewendet wurde, damit ich einem Benutzer einfach bestimmte Rechte bei der Registrierung und zuweisen kann überprüfen Sie sie später (zB $user->hasRight(CREATE_POST)).

Ich frage mich, ob es dazu ein besserer Ansatz ist. Es ist verwirrend sicher, wenn die Rechte nicht speziell mit dem Benutzer verknüpft (ich konnte eine Tabelle, wo jedes Recht eine boolean Spalte ist aber das klingt nur wie eine kleine Verbesserung) - und was passiert, wenn ich einige um ändern?

Ich bin nicht auf der Suche nach Standard-Bibliotheken (die App selbst ist eine Lernerfahrung für mich: Postgresql, Git etc.), obwohl ich mich sehr glücklich bin Inspiration von ihnen zu nehmen, um mein eigenes zu bauen - also wenn es ist etwas besonderes, das du denkst, ich sollte einen Blick darauf werfen, bitte sag es so :)

+0

Zusätzlich: es wird für eine PHP-Anwendung sein, aber wenn es eine gute Übung in sagen, Ruby on Rails getan wird, bin ich sicher, dass ich es herausfinden kann :) – Ross

Antwort

4

Das ist im Grunde der gleiche Ansatz, den ich in meinen eigenen Web-Anwendungen nehme (und ein bisschen Versuch und Irrtum ist in das für mich gegangen). Der einzige Unterschied ist, dass ich wahrscheinlich eine Tabelle verwenden würde, die die verschiedenen Berechtigungen wie Spalten hat, so dass, wenn Sie später mehr Berechtigungen hinzufügen möchten, können Sie. Wenn Sie Bits in einem Integer verwenden, werden Sie auf eine feste Anzahl von Berechtigungen beschränkt, nämlich auf so viele Bits wie in der Ganzzahl. Normalerweise wäre das 32, was wahrscheinlich genug ist, aber ich möchte mich nicht so beschränken.

Für was es wert ist, das ist auch das Modell, das phpBB verwendet (Berechtigungen als Tabellenspalten), und wenn es für wohl die beliebtesten PHP-Web-App gut genug ist, ist es wahrscheinlich gut genug für dich ;-)

+1

Ich mag die Idee der Verwendung von Tabelle für ACL. Ich denke, Sie können mir Ratschläge geben, wie Sie dies richtig gestalten, um ACL zu erreichen. Also habe ich die Tabelle 'Project', die mit' Drawing' eine Eins-zu-Viele Beziehung hat, und eine Tabelle USER. Sagen wir, wir haben die Projekte "A" und "B", die viele Zeichnungen enthalten.Wie kann ich so gestalten, dass ich zulassen kann, dass 1 Benutzer nur A anzeigt, ein Benutzer nur B anzeigt und 1 Benutzer beide anzeigen kann. –

1

Ich bin sicher, Sie haben phpgacl bereits gefunden, aber hier ist ein Link, falls Sie es nicht getan haben. Es kann ein wenig rau sein Kopf herum wickeln auf den ersten, und sicherlich die Bibliothek ist schwierig (zeitaufwendig) in ein Projekt zu realisieren, aber die Dokumentation und Demo sind EXCELLENT Referenzpunkte.

PHP Generic Access Control Lists

+0

hatte ich nicht, aber es sieht sicherlich interessant aus. – Ross

4

Sie können einen Blick auf die Dokumentation von Spring Security (vormals Acegi) nehmen, die eine weit verbreitete Java-ACL-Framework ist.

Die Dokumentation ist erschöpfend und beschreibt auch die verschiedenen in der Gestaltung von Bot-Authentifizierung und Autorisierung gemacht Überlegungen. Auch ohne Java zu verwenden, ist es wert, gelesen zu werden.

Sie können sich die index page ansehen, um einen Überblick zu bekommen und einen Eindruck davon zu bekommen, was Acegi tut (und nicht tut). Sie können auch direkt auf die authorization concepts oder sogar auf die database schema überspringen.

+0

Das Site-Layout für Spring Security wurde geändert. Hier ist die Liste der aktualisierten Links: [index page] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity.html) , [ACL-Konzepte] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html) und [schema] (http://static.springsource.org /spring-security/site/docs/3.1.x/reference/appendix-schema.html) –

1

ACL Ansätze in Web-Anwendungen, im Allgemeinen, wurden diskutiert, zum Beispiel here.

+0

Bitte vermeide Link-Only-Antworten. Wenn die Verbindung unterbrochen wird, wird die Antwort unbrauchbar. –

Verwandte Themen