Ich halte es für besser, wenn die Änderungen "Online" erfolgen können. Es gibt dabei aber auch Nachteile:
- Die Abfragen können die Performance stark beinträchtigen, besonders bei Verknüpfung mit TAction, da diese permanent während des Idling abgefragt werden. Dies kann man aber durch nur einmaliges Einlesen verhindern (dann ist es aber nicht mehr wirklich "Online") oder durch eine entsprechende Zeitabfrage, damit die Rechte nur alle x Sekunden ereneut abgefragt werden.
- Wird dem Benutzer ein Recht entzogen, während er sich in einer Bearbeitung befindet, kann dies dazu führen, dass er Vorgänge nicht vollständig abschliessen kann.
Bei der Rechteverwaltung halte ich eine Kombination von Benutzer- und Gruppenrechten für sinnvoll. Dies vereinfacht die Verwaltung. So kann man z.B. einen bestimmten Benutzer der Gruppe "Buchhaltung" zuordnen, ihmn aber nur das Recht "Jahresabschluß" entziehen. Bei einer Verwaltung nur mit Benutzerrechten müsste man dem Benutzer alle Rechte der Buchhaltung erteilen bis auf den Jahresabschluß. Auch vereinfacht dies die schnelle Erweiterung der Rechte ganzer Benutzerguppen.
Wenn Du die Benutzerverwaltung in einem existierenden System einführen willst, musst Du auch entsprechende Prüfroutinen einbauen, die allen Benutzern beim ersten Mal sinnvolle Rechte erteilen oder einen Admin festlegen, der dann diese Arbeit machen kann. Auch beim Hinzufügen von neuen Funktionalitäten ist daran zu denken, dass diese beim Update sich automatisch in die Rechtetabelle eintragen.
Zur Speicherung würde ich folgendes Schema vorsehen:
- Benutzer [BenutzerID]
- Gruppen [GruppenId]
- Rechte [RechtId]
- Benutzergruppen [GruppenId * BenutzerId]
- Benutzerrechte [BenutzerId * RechtId]
- Gruppenrechte [GruppenId * RechtId]
Nicht zu unterschätzen ist auch eine stabile und gut bedienbare Benutzer- und Rechte verwaltung, sonst legen die Benutzer das System innerhalb kürzester Zeit komplett lahm.