Sinnvolle Realisierung von Rechten

mammuteffect

Mitglied
Hallo,
ich wusste nicht genau, wo diese Frage hingehört, deswegen habe ich sie erstmal hier gepostet.
Also zu meinem Problem.

Ich mache eine Seite für meinen Sportverein und ich möchte es im Adminbereich so umsetzen, dass z.B. Trainer der Fußball-A-Jugend nur Ergebnisse der Fußball-A-Jugend. Ich habe mir überlegt, dass ich der Tabelle mit den Abteilungsübersichten eine Spalte 'rechte' hinzufüge und als Inhalt abhängig von der Abteilung halt eine spezifische 'flag'. Also z.B. bei Fußball-A-Jugend die Flag 'a'.
Wenn also jemand jetzt im Ergebnisse eintragen will soll erst geprüft werden, ob er bei seinen Rechten die Flag 'a' hat und dann sollen aus der Tabelle alle Bereiche ausgelesen werden, bei denen die Flag 'a' benötigt wird.
Meine Frage ist also ob diese Lösung sinnvoll ist oder ob es einfachere bzw. schlicht bessere Lösungen gibt.
Vielen Dank schonmal!
 
Aha, gut, Prinzip verstanden, Umsetzung Fragezeichen :D
Angenommen (auf dein Beispiel bezogen) ein User darf News verfassen (1), News löschen (4) und Polls verfassen (8), aber NICHT löschen (32). Das würde dann als Dezimalzahl 13 ergeben, als Binäre 00000000000000000000000000001101. Die Binäre würde ich dann (wenn ich es richtig verstanden habe) in die Tabelle schreiben, oder? Und wie würde ich dann errechnen, ob jemand News löschen darf?
 
Der Vorschlag von Sven ist ohne Frage eine effiziente, häufig verwendete und bewärte Methode, Rechte zuvergeben, aber IMHO nicht das Optimum zur Verwendung in einer Datenbank.
Ich würde eine m:n-Beziehung zwischen den Tabellen "Benutzer" und "Rechte" herstellen. Möglicherweise ist es in Deinem Fall auch angebracht, eine weitere Tabelle, nämlich die Tabelle der Manschaften in Deine Beziehung aufzunehmen.

Beispiel:
Tabelle Benutzer
Code:
ID Name Funktion (vereinfacht, evtl. sollte die Funktion auch in einer eigenen Tablle liegen)
 1 Hans Admin
 2 Otto B-Jugend-Trainer
 3 Mark A-Jugend-Trainer
 4 Paul A-Jugend-Spieler

Tabelle Mannschaft
Code:
ID Name
 1 A-Jugend
 2 B-Jugend

Tabelle Manschaftsrechte
Code:
ID Recht
 1 Spielbericht schreiben
 2 Ergebnisse editieren

Tabelle MannschaftsrechteVergabe
Code:
bID mID mrID //BenutzerID, MannschaftsID, MannschaftsrechteID
  1   1    1 //Hans darf zur A-Jugend Spielberichte schreiben
  1   2    1 //Hans darf zur B-Jugend Spielberichte schreiben
  1   1    2 //Hans darf A-Jugend Ergebnisse editieren
  1   2    2 //Hans darf B-Jugend Ergebnisse editieren
  2   2    1 //Otto darf zur B-Jugend Spielberichte schreiben
  2   2    2 //Otto darf B-Jugend Ergebnisse editieren
  3   1    1 //Mark darf zur A-Jugend Spielberichte schreiben
  3   1    2 //Mark darf darf A-Jugend Ergebnisse editieren
  4   1    1 //Paul darf zur A-Jugend Spielberichte schreiben
Gruß hpvw
 
mammuteffect hat gesagt.:
Die Binäre würde ich dann (wenn ich es richtig verstanden habe) in die Tabelle schreiben, oder?

Nö...du würdest die 13 in die DB schreiben.

Dann schaust du nach, ob das 2. Bit gesetzt ist: (Funktion hab ich mal bei php.net geliehen:-))
PHP:
function readbit($val, $bit) {
       return ($val&(0+('0x'.dechex(1<<($bit-1)))))?'gesetzt':'nicht gesetzt';
   }
   echo readbit(13, 2);
$val ist die Berechtigung, $bit das auszulesende Bit.
 
Zurück