# Benutzerverwaltung



## nove (23. Mai 2007)

Hallo Leute,

ich mache mir gerade Gedanken um ein System für das Setzten von Benutzerrechten in einem Java Programm.
Hat jemand mir einen vernüftigen Ansatz wie man anhand einer Benutzerverwaltung Menüpunkte, Tabs, Buttons ausgrauen kann. Ich bin mir über Funktionen im klaren wie ich was ausgraue. Nur möchte ich mir Zeit sparen und nicht Code doppelt und dreifach schreiben müssen.


----------



## André Uhres (23. Mai 2007)

nove hat gesagt.:
			
		

> ..Hat jemand mir einen vernüftigen Ansatz wie man anhand einer Benutzerverwaltung
> Menüpunkte, Tabs, Buttons ausgrauen kann..


Das Ausgrauen ist ja kein Problem und kann unmittelbar nach dem Einloggen geschehen. 
Was ist also dein Problem?


----------



## nove (23. Mai 2007)

ja schon...

ich suche nach einer Methode bei der ich nicht in jedes kleine(schei..) GUI Objekt die Prüfung hinterlegen muss. Ich suche praktisch was Globales sowas wie eine Überwachung die darauf achtet, daß nicht auf Dinge zugegriffen wird für die der Benutzer nicht berechtigt ist.


----------



## André Uhres (23. Mai 2007)

nove hat gesagt.:
			
		

> ..eine Überwachung die darauf achtet, daß nicht auf Dinge zugegriffen wird für die der Benutzer nicht berechtigt ist.


Ich versteh immer noch nicht, wo dein Problem ist,
denn auf eine ausgegraute Komponente kann doch eh niemand zugreifen  :roll:


----------



## nove (23. Mai 2007)

hmmm... Also... Grübel....

wenn sich ein Benutzer einloggt in das System.. dann müssen ja in jedem Gui-Objekt die Punkte ausgegraut sein für die er keine Berechtigung hat.

Die Berechtigungen können sich aber von Benutzer zu Benutzer unterscheiden somit muss ich ja irgendwo nachschauen welche Berechtigungen der Benutzer hat. Schön wäre jetzt wenn ich das ganze irgendwie Zentral behandeln könnte ohne das ich jedesmal mords den Code in jedes Gui Objekt Hacke um nachzuschauen welches Element den nun ausgegraut werden muss. 

So wie ich das sehe ist das wohl aber übel so, deshalb funktionieren viele Benutzerberechtigungsysteme auch nur mangelhaft. Nur ist das bei meiner Anwendung Pflichtkür da es sich um so eine Art Gastronomie Programm handelt das mit einem Schlüsselsystem arbeitet.

Ich suche auch nicht nach einer fertigen API(schön wärs schon) oder Lösung sondern nur nach einem gedanklichen Ansatz wie so etwas zu lösen wäre.


----------



## nols (23. Mai 2007)

könntest du nicht für jeden Benutzer oder Berechtigungsgruppe, je nachdem wie das System ausgelegt ist, eine ArrayList anlegen, in der sich dann die auszugrauenden Objekte befinden?
Dann könntest du über diese Liste laufen und die Gui Elemente deaktivieren.
Um nicht alles mehrfach in die verschiedenen Listen zu speichern, könnte man ja auf schon vorhandenen Listen aufbauen.

Ich hoffe du verstehst meinen Ansatz.


----------



## André Uhres (23. Mai 2007)

Wenn du nach dem Einloggen alle in Frage kommenden Komponenten erzeugst, 
dann kannst du sie schon zu dem Zeitpunkt auch gleich ausgrauen, wenn der Benutzer kein Recht darauf hat.
Somit musst du das nicht nochmal an anderen Stellen wiederholen.


----------



## nove (23. Mai 2007)

so was in der Art hab ich mir auch schon gedacht. Wenn die Applikation überschaubar ist in der größe mag das ja kein Problem zu sein. Aber was wenn es sich dann schon um eine kleine WaWi handelt die doch weit umfangreicher an GUI-Objekten ist wie ein einfaches Kassensystem?!

Irgendwann schlepp ich dann die halbe Applikation im Speicher rum. Vor allem hab ich ja dann auch Ladezeiten für 1-2 Kaffees.


----------



## nove (23. Mai 2007)

nols hat gesagt.:
			
		

> könntest du nicht für jeden Benutzer oder Berechtigungsgruppe, je nachdem wie das System ausgelegt ist, eine ArrayList anlegen, in der sich dann die auszugrauenden Objekte befinden?
> Dann könntest du über diese Liste laufen und die Gui Elemente deaktivieren.
> Um nicht alles mehrfach in die verschiedenen Listen zu speichern, könnte man ja auf schon vorhandenen Listen aufbauen.
> 
> Ich hoffe du verstehst meinen Ansatz.



hört sich nicht schlecht an. Darüber werd ich mir glaub mal Gedanken machen.

Also im Grunde genohmen so.

- Feststellen welche GUI aufgerufen wird
- eine Liste erstellen aus der Arraylist für die Komponenten die ausgegraut werden müssen
- GUI Objekt mit übergabe der toDisableList
- Funktion in GUI aufrufen die die toDisableList abarbeitet

somit kann ich für jeden Benutzer eine Liste erstellen.

So müsste es doch gehen?


----------



## nols (23. Mai 2007)

hört sich doch ganz gut an.

ich weiß zwar nicht was du hiermit meinst:


			
				nove hat gesagt.:
			
		

> - GUI Objekt mit übergabe der toDisableList



Aber ich denke der Ansatz sollte funktionieren


----------



## nove (23. Mai 2007)

myGuiComponent mgc = new myGuiComponent(listToDisable)

so mein ich das. ich muss ja der Gui die Informationen übergeben welche die GUI deaktivieren soll.


----------



## kleiner_held (23. Mai 2007)

Wenn man MVC konsequent durchzieht, ist es die Aufgabe des Controllers die Rechte abzupruefen und Elemente an-/abzuschalten bwz vielleicht sogar ganz wegzulassen. Es bietet sich dann an, einen Singleton AccessManager oder aehnliches bereitzustellen, um ganz einfach von verschiedenen Stellen im Code die aktuellen Rechte abfragen zu koennen.
Wenn man eine Server-Anwendung hat, ist es eigentlich auch zwingend notwendig, eine zweite Rechte-Pruefung im Server zu machen und bei nicht berechtigten Aktionen eine RemoteException zu werfen.


----------



## Guest (23. Mai 2007)

Ich weiss nicht wie Umfangreich deine Anwenung ist und wie genau bzw. die vielfältig die Rechteunterscheidungen sein sollen. 

Grundsätzlich würde ich sagen der Controler ist für sowas zuständig, da das aber bei uns im Laufe der Zeit auch nicht immer so gemacht wurde ist es zum Teil halt so, dass beim Erzeugen der GUI (nach dem Initialisieren aber vor dem Anzeigen der Komponente) eben die Rechte geprüft werden.

Was meiner Meinung nach noch ein Ansatz ist, sind abgeleitete GUI-Komponenten, die dann eben Benutzername (oder was halt nötig ist) mit übergeben bekommen und selbst prüfen wie sie sich zu verhalten haben. Ist nicht unbedingt die sauberste Lösung (finde ich) sollte aber gehen. 

Trotz allem würde ich (im Sinne des MVC) aber trotzdem allgemein Empfehlen so etwas vom Controler handeln zu lassen.


----------



## SWING4U (23. Mai 2007)

Am besten kappselst du die einzelnen Funktionen in Module...! Und machst die Module abhängig von Benutzerrechten etc.

Hoffe hilft dir weiter... ;-)


----------



## nove (23. Mai 2007)

Also meine Gedanken sind jetzt soweit gediehen:

in einer Datenbank lege ich folgendes ab:

Benutzer | Object | Component

Das beschreibt mir welche Dinge ausgegraut werden

Logged sich der Benutzer dann ein erstellt mein Programm eine Liste nennen wir sie mal
toDisableList

ruft der Benutzer dann z.B. die Kundenverwaltung auf wird bevor die GUI gebaut wird die 
toDisableList durchlaufen und nachgeschaut ob dieses GUI Objekt darin vorkommt. Ist dies
der Fall wird eine weitere Liste für erstellt die nur das beinhaltet was die GUI betrifft.
Nun wird diese Liste an den Konstruktor der GUI übergeben. Dieser durchläuft erstmal die
Liste und disabeld erst mal alles was in der Liste steht. Danach gehts normal weiter.
Ich denke dieser Ansatz kann sich einigermaßen sehen lassen.


----------



## Waldi (29. Mai 2007)

Also ich hab das so gemacht: In der Datenbank hab ich Rechte für Tabellen und Spalten vergeben. Rechte zum schreiben, lesen und ändern. Wenn jetzt ein unauthorisierter Benutzer irgendwas aufgerufen hat wozu er keine Rechte hatte hat er einfach nix gesehen. Ist zwar nicht so ne saubere Art aber den Zweck erfüllt es. Wenn ein unauthorierter was ändern oder schreiben wollte hat er von der DB ne Fehlermeldung bekommen.


Was hältst du davon??


----------

