# Benutzer- und Rechteverwaltung



## UnkiDunki (22. Mrz 2010)

Hi,

ich hoffe, ich poste in diesem Bereich richtig, denn das hätte auch gut zu allgemeinen Java-Themen gepasst, aber gut...

Es geht darum, dass ich gerne eine Benutzer- und Rechteverwaltung in meiner GUI-Anwendung hätte (hey, noch ein möglicher Threadauffangskandidat) und ich überlege mir gerade, wie ich das am besten umsetze...

So habe ich mir das bisher gedacht:

Nach erfolgreichem Login, wird die User-ID statisch irgendwo gesetzt, auf die ich dann während der ganzen "Session" Zugang habe.
Neben der User-Tabelle, erstelle ich eine Rechte-Tabelle mit User-ID als Schlüssel und der Rest sind quasi boolsche Columns mit Namen wie "editUsers", etc.

Dann erstelle ich mir eine statische Methode, der ich einen String (Column-Name) übergebe. Diese Methode verbindet sich zur Datenbank, guckt unter der User-ID in der Rechtetabelle nach übergebenem Spaltennamen und gibt mir den darin befindlichen Wert zurück...
Noch in dieser Methode lasse ich dann bei "false" eine Systemmeldung a la "Keine gültigen Rechte für diese Operation" ausgeben.

So kann ich dann in der GUI-Anwendung bei Aufruf der Methode editUser(int pID) als erste Zeile den Befehl checkRightsFor('editUser') setzen und bei false direkt herausspringen...

Wie denkt ihr darüber? Kann man das so machen oder wo gibt es Probleme bzw. wo ist das nicht wirklich optimal umgesetzt?
Freue mich auf Anregungen und schon mal vielen Dank im Voraus


----------



## KYLT (22. Mrz 2010)

Hi UnkiDunki,
Du musst dich von der direkten Verbindung zwischen Rechten und Benutzern trennen. Bei den meisten Anwendungen gibt es kaum unterschiede zwischen dem durchschnittlichen Benutzer, jeder darf die gleichen Aktionen ausführen. Man unterteilt daher Rechte nach Aufgaben , sogenannten Rollen. Hast du ein Forum , dann sind i.d.R. die Rollen Gast , Benutzer, Moderator und Admin vorgegeben. So hast du also 4 Einträge, die in abhängigkeit von Berechtigungen  stehen. -In deinem Beispiel hättest du für jeden User einen Eintrag, jetzt stell dir mal google usw. vor mit den tausenden Benutzern ...  ;-)

Grundsätzlich gibt es zwei gängige Arten an Rollen und Berechtigungen ranzugehen.
1) Jeder Benutzer erhält individuelle Rollen, diese hängen jeweils an Rechten ( z.B. denkbar für die Unterteilung von Admin und Co-Admin)
2) Jeder Benutzer wird in eine Gruppe eine Rolle vergeben, diese hängt wiederum an Rechten ( z.B. ein Benutzer ist Mod für ein Forum und Benutzer für ein anderes)


----------



## UnkiDunki (22. Mrz 2010)

Ok, sehr guter Einwand! Finde ich super und werde ich auch so umsetzen. Danke für die Anregung 
Den Rest würdest du so lassen? Denn das von dir angesprochene ist ja mehr oder weniger nur auf Datenbankebene.


----------



## KYLT (22. Mrz 2010)

Nun, es ist noch nicht wirklich ersichtlich, wie du die Werte jetzt Rollen halten möchtest. Lädst du z.B. alle Berechtigungen vorweg, oder immer nur je nach Bedarf. Bedenke, die Geschwindigkeit und Speicherbedarf, die du durch seperates Laden der Daten einsparrst, bühst du vielleicht wieder ein. Hier sei wieder das Beispiel mit dem großen Suchanbieter genannt. Stell dir nur vor, bei jedem Klick wird pro Benutzer eine Datenbankverbindung aufgebaut und die Überprüfung durchgeführt. Auch die beste Verbindung macht soviele Datenbankzugriffe nicht mit und wird träge. Zudem brauchst du die Rollen ja meist im Vorraus, oder zeigst du dem Benutzer vorweg das Adminmenü und sagst nur bei der Speicheraktion ein "Ätsch bätsch - Darst du nicht" an ?! 
Das halten der Werte in der Session würde ich etwas objektorientierter lösen, nicht nur einzelnene Attribute sondern vollwertige Objekte verwenden, ganz nach OOP.


----------



## UnkiDunki (22. Mrz 2010)

Ok,

alles klar. Werde das dann wirklich richtig OOP machen und vorladen... Danke auch hier für den Tipp. Ich glaube das ist am optimalsten


----------



## diego11 (19. Okt 2010)

Hallo UnkiDunki,

wie hast du es programmiert dass die Rechte vorgeladen werden?

Danke schon mal im Voraus...

Grüße
Diego


----------

