Rechtesystem für meine Website?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Hi,

also wenn du tatsächlich eine Seite von Grund auf erstellen willst mit Nutzer basiertem Berechtigungssystem, hast du einen weiten Weg vor dir. Eventuell ist es sinnvoller auf ein CMS zurückzugreifen.

Je nach Anwendung bietet sich Drupal (sehr mächtige = hohe Einarbeitungszeit) oder Wordpress (etwas weniger mächtig = schneller Einstieg) + Members (ein Plugin).

Nun aber zur eigentlichen Frage:

um das ganze wirklich professionell und Zukunftsfähig zu gestalten benötigst du mehrere Tabellen:

  • User (sollte ja sowieso schon vorhanden sein)
  • Roles (Benutzerrollen zur Rollen basierten Rechtevergabe)
  • User-Roles (Zuordnung von Usern zu Roles)
  • Role-Permissions (Zuordnung von Roles zu einer Berechtigung)
  • (User-Permissions) (Zuordnung von Berechtigungen zu einem User)

Die Struktur solltest du einfach so aufbauen:

Nur Rechte die freigegeben sein sollen werden in der Datenbank gespeichert, solltest du eine neue Berechtigung einführen hat also zunächst keiner Zugriff darauf. Benutzerrollen sollten immer weniger oder gleich viele Berechtigungen besitzen wie ein zugeordneter User.

Mit irgendeiner festen Rechtestuktur, womöglich noch mit einer Bit-Struktur wirst Du m.E. nicht froh.

Standard für solche Zwecke ist eine Kombination aus Tabellen ähnlich wie von sawaswolf vorgeschlagen:

User

Roles

Rights

User_Roles

Roles_Rights

Wenn Du bei einer solchen Struktur Probleme mit der Funktion hast, ist es auch ganz einfach in irgendeinem Programmierforum Hilfe zu holen, jeder, der etwas Ähnliches schon mal gemacht hat, wird die Struktur verstehen.

Meiner Meinung nach wäre es nicht gerade sinnvoll, für jede Berechtigung ein Attribut in einer Datenbank zu erstellen, da es bei Änderungen zu viel Aufwand gäbe.

Programmieren wird in diesem Fall zur Fleißaufgabe. Das geht nicht anders. Woher soll der Rechner oder die Webseite sonst erfahren, wer was darf?

Wenn man sich Unix, Linux, Windows, OS X … ansieht, kann man auch dort bestimmte Zugriffsrechte auf dem Computer festlegen. Dort ist dies im Prinzip ebenso implementiert. Da konnten die Systemprogrammierer auch nicht klagen, dass dies „viel Arbeit“ ist.

Prinzipiell ist der Computer immer mehr oder weniger auf unsere Eingaben angewiesen. Also mußt du die Rechte einzelner Nutzer deiner Seite auch einzeln setzen. Der Computer kann das nicht!

 jede stelle gilt für einen bereich . wie beim unix dateisystem

und dann

kannst du es mit BIT operatoren machen

000010

und dann mit AND und einer MASKE gucken ob es war wird

000010

&& (BIT AND)

111111

gleich

000010

also WERT AND MASKE == 000010

entsprechend gibts natürlich Dezimal

also

(2 && 255 == 2) ergibt TRUE

(3 && 255 == 2) ergibt FALSE


Foosel  25.09.2015, 09:43

Ist eine schlechte Idee. Insbesondere wenn Rollen wegfallen oder mehrere dazukommen reichen dir Int und Long schnell nicht mehr aus und du speicherst als Text ab. Wartungsfreundlich ist das auch nicht.

0
RakonDark  25.09.2015, 10:27
@Foosel

Je nachdem wie aufwendig sein Projekt überhaupt ist . Bringt ja auch nichts wie oben gleich mit X Tabellen anzufangen wenn er nur paar Rechte braucht . Also ist es keine schlechte Idee sondern ein Anwendungsfall . Für meine Zwecke wäre Deins eine schlechte Idee ;)


0
pfuffi 
Beitragsersteller
 25.09.2015, 09:35

Danke für deine Antwort! Da ich mich nicht mit BIT-Operatoren auskenne, habe ich nicht gerade sehr viel Ahnung, wie deine Methode zu realisieren ist. Eine etwas einfachere Erklärung wäre sehr nett, damit auch ich es begreifen kann. ^^

0
RakonDark  25.09.2015, 10:32
@pfuffi

Also wenn Du keine BIT operatoren hattest . Dann kann man das einfach mal Nachlesen . Das ist GrundlagenInformatik .

0
RakonDark  25.09.2015, 09:07

gibt natürlich einige operatoren um genau die richtigen werte und kombies zu prüfen .

0
RakonDark  25.09.2015, 09:19
@RakonDark

das beispiel ist schlecht gewählt

normal wenn du das da oben also 0000010 prüfen willst wäre richtig

2 && 2 == 2 = TRUE

3 && 2 == 2 = FALSE

mit der obrigen maske kannst du gucken ob z.b. alle werte gesetzt sind

also

255 && 255 == 255 = TRUE

3 && 255 == 255 = FALSE


na fällt dir was auf ;)


und mit anderen operatoren kannst du dann auch einzelne oder mehrere bits auf einmal setzen

0

Hallo!

Hast du schon eine Datanbank angeschlossen?

Dann mache es mit einer Tabelle in der Datenbank.

Berechtigungen sind doch eher statisch -- (1: alles, 2:etwas 3: etwas weniger

und 4: gar nix).

Und jedem User (die ja wohl in der Datenbank sind) ein Attribut für Berechtigungen geben -- natürlich ist eine Änderung immer aufwendig, aufwendiger als keine Änderung.

(new Berechtigung = UPDATE TABLE USER SET Berechtigung = 4 WHERE USER = 'pfuffi')

Aber die Berechtigung gehört zum User, ich sehe auch keine andere, sinnvolle Möglichkeit.

Gruß


pfuffi 
Beitragsersteller
 25.09.2015, 09:31

Das wäre meiner Meinung nach die einfachste Methode, jedoch ist diese auch unpräzise. Was, wenn ich jede einzelne Aktion, die der User (oder die Gruppe) durchführt, kontrollieren möchte? In diesem Fall ist diese Methode ungeeignet, oder nicht? :)

0
verreisterNutzer  25.09.2015, 09:41
@pfuffi

"unpräzise" verstehe ich nicht, die Berechtigung (ist im Beispiel) entweder 1 oder 2 oder 3 oder 4, und irgendwie musst du ja auch jeder Aktion eine Berechtigung geben (diese Berechtigung brauche ich mindestens) , und das über prüfen machst du ja nicht von Hand

z.B. vor jeder Aktion

SELECT Berechtigung From USER;

IF USER.Berechtigung < AKTION.Berechtigung THEN <USER darf>

                                                                    ELSE <USER darf nicht>

Kleine Anmerkung:: auch ich verwende manchmal noch Bit-Masken, aber ganz bestimmt nicht bei Web-Seiten (Bitmaske muss auch in die Datenbank) -- im allgemeinen halte ich Bitmasken gür veraltet bei den heutigen Rechnerumgebungen.

Gruß

0
Foosel  25.09.2015, 09:45
@pfuffi

Wenn du erwartest, dass du sehr viele Berechtigungen haben wirst, dann nimm eine m:n Tabelle
- User
- Permissions
- permissionPerUser: userId, permissionId
sehr schnell indexierbar & wartbar und übersichtlich

0
pfuffi 
Beitragsersteller
 25.09.2015, 10:13
@Foosel

Wenn ich Solch eine Tabellenstruktur erstelle, wie würde dann die abfrage der Berechtigungen aussehen? Verstehe ich das so richtig?:

SELECT * FROM Perm_per_User WHERE userID = 4 AND permissionID = 25

Und wenn die Anzahl rows>0  ist, dann ist dem User den Zugriff gewährt?

(Natürlich sind die IDs nur im Beispiel als Zahlen festgelegt)

0