2009-07-13 14 views
1

Die Seite, mit der ich arbeite, hat einen etwas komplizierten Umgang mit Benutzern und Berechtigungen.Wie können mehrere Benutzer mit mehreren Berechtigungsstufen strukturiert werden?

Dies sind die Benutzertypen:

  • Benutzer
  • Einrichtung Approver
  • Einrichtung Admin
  • Unternehmens Approver
  • Corporate-Admin

Nun gibt es auch Einrichtungen und Hier kommen diese Berechtigungsstufen ins Spiel abspielen. Die Einrichtungen sind wie solche für die Benutzer und Benutzerebene in einer Tabelle verknüpft:

user_id  facility_id  userlevel 
joebob  ABCInc   Facility Admin 

Ziemlich einfach so weit, aber jetzt, was ich will in der Lage sein, einer Benutzerebene zu ermöglichen, Einschränkungen auf einer anderen Benutzerebene für eine bestimmte Anlage . Zum Beispiel bin ich der Administrator der Einrichtung und möchte Benutzern nur erlauben, bestimmte Formulare einzureichen. Wie würde ich das speichern?

Ich dachte eine neue Tabelle, die facility_id, userlevel und permissionlevel verbindet. Aber was genau wäre Berechtigungsniveau? Ein int? Oder würde ich Spalten wie canOrderThings oder canSearchForStuff zur Tabelle hinzufügen?

Ich sah, ob wie this würde funktionieren, aber es scheint wie es würde ein bisschen chaotisch und schwer zu verfolgen, wenn Sie eine große Anzahl von Berechtigungen haben. Wie würdest du Berechtigungsstufen hinzufügen, ohne alles aus dem Wahnsinn zu werfen? Oder sogar das Setzen von Berechtigungsstufen wäre ein bisschen schwierig, denke ich.

Auch Benutzer-Ebenen sind direkt mit Benutzern in der Benutzertabelle verknüpft, aber diese Server dienen verschiedenen Zwecken.

Gibt es eine vollständig bessere Möglichkeit, all das zu strukturieren?

Antwort

2

Die Verwendung einer zweiten Tabelle für Optionen ist eine gute Idee. Einige Foren-Frameworks verwenden diese Methode.
Jeder Ihrer Benutzer erhält eine UserGroupId, die normalerweise ein Int ist, da sie am einfachsten zu arbeiten sind. UserGroupId von 1 zum Beispiel, könnte ein Administrator sein, 2 könnte ein Lehrer sein (hängt von Ihrer Organisation ab).

Dann haben Sie eine Tabelle mit dem Namen Berechtigungen, in dieser Tabelle enthalten Sie alle Optionen als Spalten, etwas wie dies.

UserGroupID --|-- SearchEnabled --|-- CanOrder 
      1     0   1 
      2     1   1 

Mit einem einfachen Binärsystem, 1 aktiviert, 0 deaktiviert, können Sie Optionen für jede Benutzergruppe steuern. Auf diese Weise können Sie alle Berechtigungen mit einer einzigen Abfrage abrufen und gleichzeitig einen sehr großen Bereich für die Anpassung bereitstellen.

Sie müssen jedoch keine Binärzahlen verwenden. Zum Beispiel könnten Sie die Werte 1,2,3 verwenden, wobei 1 die volle Berechtigung, 2 die partielle und 3 die Null ist. Es hängt davon ab, wie spezifisch Ihre Vorschriften sein müssen.

Jetzt, bevor Sie einem Benutzer erlauben, eine Option auszuführen, überprüfen Sie die Benutzerberechtigungen (die Sie in einem Array oder einer Klasse für schnellen Zugriff speichern sollten).Für eine Funktion, die Sie verwenden würde eine Bedingung wie

If ($user['SearchEnabled') 
{ 
    $generate->SearchOptions(); 
} 
else 
{ 
    $generate->Error('NoSearchPermissions'); 
} 

Mit Binärzahlen hat den offensichtlichen Vorteil, einfach zu überprüfen, ob WAHR oder FALSCH ermöglicht suchen. Wenn Sie ein anderes Zahlensystem verwenden, wäre es ein bisschen mehr Arbeit erfordert den spezifischen Wert
If ($user['SearchEnabled'] == 2 || $user['SearchEnabled'] == 1)

+0

[+1] Sie haben mich dazu geschlagen! Gut zu sehen, das ist ein guter Weg, Dinge zu tun. – EvilChookie

0

Nun überprüft, wenn ich in meiner Anwendung implementieren Berechtigungen will, kann ich diese 3 Möglichkeiten tun (ich auf denken die Spitze meines Kopfes):

  1. In der Benutzer-Tabelle (und aufzeichnen, wenn Sie eine ORM verwenden) setzen Sie eine Ebene Int. So kann zum Beispiel ein Level 1 Benutzer nur Formulare sehen, Level 2 kann posten, Level 3 ist Admin und kann bearbeiten, etc. Dann in den Ansichten einfach überprüfen, um zu sehen, auf welcher Ebene der Benutzer ist und das Formular echo ist sie können etc bearbeiten . (Basierend auf Ihre Frage gehe ich davon aus das ist, was Sie bereits tun)

    Pro:

    • Einfach einzurichten
    • Hier können Sie Gruppenberechtigungen zusammen.

    Nachteile:

    • Wenn Sie einen Wert zwischen 1 und 2 müssen Sie haben eine Menge Arbeit zu tun. Daher ist es schwerer, zwischenzeitlich Ebenen hinzuzufügen.
  2. Verknüpfen Sie eine Berechtigungstabelle mit der Benutzertabelle. Grundsätzlich was der andere Beantworter in diesem Thread beschrieben hat.

    Vorteile:

    • Sie sind nicht auf ein Niveau beschränkt, können Sie so viele Ebenen dazwischen hinzufügen, wie Sie möchten.
    • Sie können genau einstellen, was jeder Benutzer tun soll.

    Nachteile:

    • Sie können keine Gruppenberechtigungen, aber ich nehme an, Sie gerade sie alle auf einmal zuweisen könnte, wenn man wollte.
    • Es ist mehr Arbeit, einem Benutzer zu sagen, was er/sie ist, weil Sie nur alle Berechtigungen auflisten oder einen massiven Wechsel durchführen können, um festzustellen, ob sie ein Administrator sind oder nicht. (Ex: ist mir einen normalen Benutzer gut ich Formulare bearbeiten kann, aber nicht suchen?)
  3. diese kombinieren, so dass im Grunde auf der Benutzertabelle Sie eine Zeichenfolge haben könnte, die Werte wie „admin“ hatte, und schau auf jeder Seite, ob sie Admin sind oder nicht.

    Vorteile:

    • Sie können so oft hinzufügen, wie Sie ohne WAK aus etwas werfen wollen.Typen wie „Super-Administrator“ oder „etwas weniger admin“

    Nachteile:

    • Wenn Sie die Feinabstimmung jeder Benutzer sind, würden Sie mit vielen neuen Benutzertypen schnell am Ende.
    • Das Hinzufügen neuer Benutzertyp-Strings kann schwierig sein, es sei denn, der Benutzertyp Stringtabelle wurde mit Berechtigungen verknüpft, aber jetzt werden wir ziemlich kompliziert.
+0

Sie haben falsche Annahmen über den Benutzer einer Berechtigungstabelle getroffen. Sie können Berechtigungen gruppieren, indem Sie unter einer Option mehrere Berechtigungen festlegen. CanSearch kann bei Bedarf 10 Unterfunktionen steuern, es hängt davon ab, wie Sie die Verwendung jeder Unterkategorie definieren. Es ist einfach, einem Benutzer zu sagen, dass er auf der ** UserGroupId ** basiert, ich bin ein Admin oder ein Lehrer oder ein Student usw. –

Verwandte Themen