Beitrag von micha (85 Beiträge) am Dienstag, 1.Juni.2004, 20:50.
Re: User mit Rechten
Also meine Idee zum Thema ist so:
In der Userdatenbank gibt es ein Feld "Rechte".
Was in Rechte steht wird von der jeweiligen Anwendungsdatenbank(AwDB) bestimmt:
In der AwDB gibt es z.B. je ein Feld für die jeweiligen Rechte (lesen,schreiben,...). In diesen Feldern steht ein für alle verwendeten Datenbanken einmaliger Wert (z.B. DB1: lesen= 1 oder 0, schreiben=2 oder 0;
DB2: lesen= 4 oder 0, schreiben=8 oder 0)(Binärsystem: 2^0=1, 2^1=2, 2^2=4, 2^3=8,...).
Wenn der User nun in "Rechte" eine 1 stehen hat, so darf er z.B. den Datensatz in DB1 lesen.
Weiter bedeuten z.b. Lesenrechte in DB1 und Schreibrechte in DB2 für den User eine 1+8=9 in seinem Feld "Rechte". D.h. Die Rechte an den einzelnen DB's werden einfach im Userfeld "Rechte" addiert. Die Verwendung des Binärsystems hat einige Vorteile, weil binäre Vegleichoperationen möglich sind: So führt z.b. ein logischer Vergleich:
9=1001 "und" 1=0001 zum Ergebnis 1
während
8=1000 "und-verknüpft" mit 1=0001 zu dem Ergebnis 0 führt (Binärsyteme kennen nur die beiden (Ergebnis-) Zustände 0 oder 1).
Wenn ich also wissen will, ob ein User an einer DB ein bestimmtes Recht besitzt, muss ich nur den Wert des Rechtes in der AwDB logisch-'und' vergleichen mit dem Wert in "Rechte" des Users in der User-DB.
Eine 1 aus diesem Vergleich sagt "yep der darf", eine 0 sagt "nö der darf ned"
Ich könnte mir vorstellen, dass man so auch Gruppenrechte hinbekommt, wenn man die Idee noch etwas weiter ausspinnt. Allerdings werden die Integerzahlen (2^n) in "Rechte" ziemlich schnell ziemlich (unhandlich?) gross.
Grüssle Micha