Rechte Verwalten

Rechte Verwalten

am 31.08.2005 18:32:08 von nikolai.onken

Hallo,

ich habe viel über Rechteverwaltung nachgedacht und wollte mal fragen,
wass die performanteste, beste, einfachste und flexibelste Lösung ist
:)

1 Rechte setzen per bits funktioniert sehr gut, aber für ein plugin
basiertes Framework brauche ich z.B. 500 verschiedene Rechte (zumindest
mehr als 64).

2 Rechte per DB: ich kann drei tabellen machen 'permissions',
'user_has_permissions' und 'user' und dann
$framework->returnPermission('delete_file'); aufrufen. dann checkt die
Funktion ob 'delete_file' in 'user_has_permissions' existiert.

Gibt es noch andere Lösungen? Mir gefällt die zweite am besten, ich
frage mich aber wie ich diese am performantesten gestalten kann.

Viele Grüße,

Nikolai

Re: Rechte Verwalten

am 31.08.2005 20:26:12 von Marcel Normann

Nikolai Onken schrieb:

> 2. Rechte per DB: ich kann drei tabellen machen 'permissions',
> 'user_has_permissions' und 'user'

Am besten weist Du den Benutzer einer Gruppe zu und gibst dieser bestimmte
Rechte. Die tabelle 'user_has_permissions' (die man dann besser
'user_permissions' nennt) enthält dann nur noch die Rechte, welche der
Benutzer im Unterschied zu seiner Gruppe hat bzw. nicht hat. Alles andere
fliegt einem vom Verwaltungsaufwand früher oder später um die Ohren.

Gruß, Marcel

Re: Rechte Verwalten

am 01.09.2005 07:45:26 von do.not.REMOVETHAT

Nikolai Onken schrieb:

> Rechte per DB: ich kann drei tabellen machen 'permissions',
> 'user_has_permissions' und 'user' und dann
> $framework->returnPermission('delete_file'); aufrufen. dann checkt die
> Funktion ob 'delete_file' in 'user_has_permissions' existiert.

Schön. Die Tabellen user und permission könnten noch Hierarchien sein,
damit man für Bestimmte "Module" oder "Usergruppen" global was festlegen
kann. Außerdem kannst Du die permissions im Prinzip in Objekte und
Aktionen aufteilen. Dann hast Du es einfacher zu sagen: Die Gruppe
"Normale Benutzer" dürfen im Modul "Veranstaltungskalender" zwar
"Gucken" aber nix "Verändern".

*Einfach* ist das dann natürlich nicht mehr. *Einfach* wäre "jeder darf
alles".

Grüße, Matthias

--
http://www.trullala.de

"Dieses E-Mail ist nur für die Mitteilung.
Damit haben Sie keine Antwort zu machen."
(Zitat aus einer dieser neumodischen Phisching-Mails)

Re: Rechte Verwalten

am 02.09.2005 18:01:48 von Olaf Schinkel

Hallo!

Ich bin mit meinem Projekt zwar noch nicht fertig, aber ich habe ein
ähnliches Problem.
Ich möchte für verschiedene Sachen verschiedene Rechte vergeben.
Ebenso sollen andere Fremdprogramme dieses Modul auch verwenden können.

Jetzt wird es etwas schwieriger:
Ich habe 2 Tabellen
Folgende Tabellen:
CREATE TABLE `os_user_objects` (
`nr` int(11) NOT NULL auto_increment,
`obj_creator` int(11) NOT NULL,
PRIMARY KEY (`nr`)
) TYPE=MyISAM AUTO_INCREMENT=10;

Und die eigentliche Propertytabelle:
CREATE TABLE `os_user_properties` (
`nr` int(11) NOT NULL auto_increment,
`obj_creator` int(11) not null,
`object` int(11) not null,
`obj_property_name` varchar(50) NOT NULL,
`obj_property_value` BLOB,
PRIMARY KEY (`nr`)
) TYPE=MyISAM AUTO_INCREMENT=1;

In der ersten Tabelle lege ich neue Objekte an und kann sehen, ob man die
Objekte löschen kann.
1 = System, kann keiner löschen.
Damit erspare ich mir Ärger, wenn man z.B. versuchen würde, den Admin zu
löschen.

Jetzt kommt der interessantere Teil.
Ein Propertie kann irgendwas sein...das ist ja das schöne daran.
Grundsätzlich braucht ein Property einen Namen, einen Typ und Rechte.

Sehen wir uns mal eine Gruppe an:
INSERT INTO `os_user_properties` VALUES (20,1,3,"TYPE","GROUP");
INSERT INTO `os_user_properties` VALUES (21,1,3,"NAME","Benutzer");
INSERT INTO `os_user_properties` VALUES (22,1,3,"RIGHTS","2,9;2,9;0");
INSERT INTO `os_user_properties` VALUES (23,1,3,"MEMBERS","10");

Eine Gruppe kann auch Gruppen als Mitglieder haben. kein Problem.
Bei Rights habe ich das so gelöst: Lesen/Schreiben/Löschen Die Einzelenen
Member sind Kommagetrennt, die 3 Rechte mit Semikolon.

INSERT INTO `os_user_properties` VALUES (70,1,12,"TYPE","GROUP");
INSERT INTO `os_user_properties` VALUES (71,1,12,"NAME","TESTGROUP");
INSERT INTO `os_user_properties` VALUES
(72,1,12,"RIGHTS","2,3,9,10;2,9,11;0");
INSERT INTO `os_user_properties` VALUES (73,1,12,"MEMBER","9,3");
Hier haben wir eine Gruppe, die den Admin (Obj 9) und die Gruppe Benutzer.
Lesen darf Objekt 2,3 und 9. Schreiben Objekt 2 und 9 niemand darf löschen.
Die Gruppe selber ist vom System angelgt und darf nicht gelöscht werden.

Ich denke, das mal als Denkanstoss.

Olaf

Re: Rechte Verwalten Nachtrag

am 02.09.2005 18:15:04 von Olaf Schinkel

Hi!

Habe da ein wenig schnell SENDEN gedrückt.
Die Property RIGHTS bezieht sich auf das Objekt selber.
Ein Programm würde also noch ein Propertie anlegen, wo es die Rechte für die
eigentliche Aufgabe anlegt.

Für ein Programm würde das so aussehen: Objekt 9 ist der Admin.
INSERT INTO `os_user_properties` VALUES (10,1,2,"TYPE","PROGRAM");
INSERT INTO `os_user_properties` VALUES (11,1,2,"NAME","EXCEL");
INSERT INTO `os_user_properties` VALUES (12,1,2,"MEMBERS","9");
INSERT INTO `os_user_properties` VALUES (13,1,2,"RIGHTS","9;9;0");
INSERT INTO `os_user_properties` VALUES (13,1,2,"LOOK_TABLE","9");
INSERT INTO `os_user_properties` VALUES (13,1,2,"MODIFY_TABLE","9");

Jetzt ist es wohl etwas klarer, hoffe ich.
Ist eh ein schwieriges Thema.

mfg
Olaf

Re: Rechte Verwalten Nachtrag

am 03.09.2005 19:33:11 von nikolai.onken

Hey Olaf,

danke für deinen Beitrag!
Kennst du Seiten im Netz, die Rechteverwaltung nach deiner Lösung
erklären? Ich würde gerne mal ein Beispiel sehen in dem ich auch den
Code nachvollziehen kann.
Viele Grüße,

Nikolai

Re: Rechte Verwalten Nachtrag

am 04.09.2005 18:56:21 von Olaf Schinkel

Hallo!

Leider kenne ich da nichts, ich entwickle das ja selber.
Mir war es nur zu blöde, das alles, was es gibt, nicht dynamisch zu
erweitern ist. Ich hoffe, das ich damit in ein paar Wochen fertig bin, da
ich ja auch noch andere Sachen um die Ohren habe.

mfg
Olaf