Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Ideales Rechte-System (https://boardunity.de/ideales-rechte-system-t862.html)

frolix 09.02.2006 12:42

1.) Hier wurden doch schon genug Links gepostet. Sowohl zum Prinzip als auch Beispielklassen. Da solltest du eigentlich alles finden. Tables brauchste in etwa folgende: users, groups, roles, users2groups, groups2roles verknuepft ueber die jeweiligen PKs.

2.) Ist halt die Frage wie flexibel du sein moechtest. Aber wenn du schon mit einem modularen System anfaengst moechtest du ja scheinbar recht flexibel sein. Also wuerde ich mich nicht von anfang an auf irgendwas festlegen.

eBoy 09.02.2006 14:29

Dann wahrscheinlich nochmal Users2Roles, damit man Usern auch direkt eine Rolle zuteilen kann.

Beeinflusst es die performance, wenn man in einer Spalte kommagetrennte Daten ablegt, diese zu einem array aufsplitten?
Also "mid1, mid2, mid3, mid4,..." zu einem Array wandeln
Oder habt ihr eine alternative Möglichkeit für mich?

svpe 09.02.2006 15:29

Du kannst auch serialize und unserialize verwenden. ob das schneller ist weiß ich nicht ;)

eBoy 09.02.2006 17:43

Komplett Editiert!!!


Meine aktuelle Umsetzungsidee sieht wie folgt aus:

- das Rechtesystem verarbeitet nur Gruppen
- Userberechtigungen müssen über virtuelle Gruppen ablaufen (Userrechte über virtuelle Gruppen, d.h. User mit Sonderrechten braucht eine eindeutige GID. Umsetzung noch unklar...)

Tabelle mit Rechten:
Code:

aktion#lesen#schreiben#edit#löschen#edit_alle#löschen_alle
aktion => entsprechender Bereich/ Aktion, für die die Rechte vergeben werden
lesen => aufaddierte GID's mit Leseberechtigung
schreiben => aufaddierte GID's mit Schreibeberechtigung
edit => aufaddierte GID's mit Editierberechtigung
löschen => aufaddierte GID's mit Löschberechtigung
edit_alle => aufaddierte GID's mit "alle editieren" Berechtigung
löschen_alle => aufaddierte GID's mit "alle editieren" Berechtigung

So, jetzt bekomm ich wieder die Verbote nicht unter... *g*
Bei den Verboten könnte ich entweder für eine "Aktion" (z.B. ein Board in einem Forum) vergeben, was einfach zu realisieren wäre. Will ich verbote getrennt für lesen, schreiben, editieren usw. vergeben will, müsste ich wieder für jedes dieser Rechte eine Spalte für die Verbote vergeben...

Die eindeutige virtuelle GID für Userrechte ist problematisch. Diese muss ja in die Folge der GID's passen und trotzdem eindeutig sein. Z.B. erst später anfangen. Dies würde die Anzahl der möglichen Gruppen begrenzen und diese virtuelle GID müsste dynamisch erzeugt werden.
Oder die User-Sonderrechte werden in einer eigenen Spalte verwaltet und serialisiert abgespeichert...


ich bastle mal an diesem Gedanken weiter und höre gerne eure Meinung dazu. Das durchdenken und eure Beiträge helfen mir die Unterschiede und Vor-/Nachteile zu verstehen ;)

Zitat:

Zitat von Aus einem anderen Forum... Dort habe ich auch dazu gepostet in einem bestehenden thread
Ich stimme axo voll zu. Ich bin auch nur hier gelandet, da ich ein rechtesystem schreiben will, das ebenfalls bitweise arbeitet Wink
Will das auch ungefähr so machen, wie oben beschreiben, muss mir nur überlegen, wie ich nicht nur Gruppenrechte, sondern auch Userrechte unterbekomme...

Habe schon überlegt, ob ich Mitgliedern mit eigenen Berechtigungen eine vituelle Gruppen-ID vergeben soll, damit diese Rechte wie eine weitere Gruppenmitgliedschaft verarbeitet werden.

[EDIT]
Ich vergebe verschiedene Rechte:
(- kein Zutritt => 0 // KEINE SPALTE!!!)
- lesen => 1
- schreiben => 2
- editieren (eigene) => 4
- löschen (eigene) => 8
- editieren (alle) => 16
- löschen (alle) => 32

In der DB mache ich dann für jedes dieser Rechte eine Spalte. zugeordnet werden diese Rechte einem Bereich oder einer Kategorie.

Dann vergebe ich jeder Gruppe eine eindeutige ID:
- 1. Gruppe => 1
- 2. Gruppe => 2
- 3. Gruppe => 4
...

In die Spalten der DB trage ich dann bei jedem Recht die berechtigten Gruppen ein (ID aufaddiert).
Also kann man durch bitweise verunden der Gruppenmitgliedschaften (ID's) und berechtigten Gruppen die Rechte erhalten.

So kann ich alle Berechtigungen für Gruppen erledigen, nun muss ich noch überlegen wie ich Verbote und Userrechte einbauen kann.
Globales Verbot (also für lesen, schreiben, editieren usw. ...) ist kein Problem, aber wie könnte ich nur lesen oder nur schreiben nehmen?
Verbote sollen Konflikte verhindern, wenn gewisse Gruppen keinen Zugriff haben sollen, aber durch eine andere Gruppe Zugriff erhalten

Irgendwelche Vorschläge?
[/EDIT]


bacon 12.02.2006 14:36

!? raff ich jetzt nicht, ist das auch deine Frage oder hat sichs erledigt? Es sagt ja schon, dass er das ganze über ne normale Bitfolge macht, die er nur noch verknüpfen muss.

Aber dann fragt er, wie er sich die korrekten Rechte rausholt, oder hab ich das jetzt falsch verstanden?

Also sagen wir mal, ein User hat das "Recht" 24.

24 = 16 + 8 = B 0001 0000 + 0000 1000. Da musste halt jetzt nochn Algorithmus schreiben, der dir das Ding auseinandernimmt, ich würde da spontan auf nen Bitoperator verweisen:

PHP-Code:


$b 
56// is 8 + 16 + 32, also 0011 1000

$c $b 2// liefert 0, da 2 = 0000 0010 nicht drin enthalten ist.
$c $b 16 // liefert 16, da 16  (0001 0000) enthalten ist.
... // und so weiter
echo $c

probier damit einfach mal rum, das ist eigentlich ganz einfach


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25