Antwort
 
Themen-Optionen Thema durchsuchen
Alt 20.01.2008, 13:37 Nach oben    #1
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard Berechtigungssysteme

Folgende Situation ist gegeben: Ich habe nun ein Framework für ein verteiltes System (Client, der zu einem Server verbindet und mit ihm kommuniziert). Ich mache hierfür sowas ähnliches wie RMI. Das heisst:
Es gibt haufenweise Interfaces. Über diese Interfaces findet die Kommunikation statt. Wenn man also mit dem Server kommunizieren will, ruft man eine Methode auf. Auf dem Server eght die Nachricht ein und er ruft dann ggf. Daten ab und antwortet.

Nun bin ich an dem Punkt, eine Berechtigungsprüfung einzubauen. Daraus ergibt sich die Frage: Wo ist das sinnvoll und zwar so, dass es sich auch leicht umsetzen lässt. Man könnte beispielsweise irgendwo eine Art Liste pflegen und eine Methode in den RMI-Interfaces mit einem ganz bestimmten Recht verknüpfen. Hat man das Recht, ist alles OK. Hat man es nicht, weist das Framework den Aufruf ab. Nun könnte man vielleicht auf der Datenbank Rechte einfügen, also sagen "Datensatz A ist öffentlich verfügbar, Datensatz B aber nur für Admins".

Davon unabhängig soll eine Anwendung noch selber eigene Rechte abfragen können, die in keines der Schemata passen, also sozusagen eine manuellen Überprüfung durchführen. Ich hoffe, ich habe mich verständlich ausgedrückt und da man ja diverse Erfahrungen aus anderen Systemen, Betriebssystemen, Foren usw. hat, was da die beste und flexibelste Möglichkeit ist.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2008, 14:13 Nach oben    #2
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 691
Standard

Also die Datenbank-Rechte für soetwas zu benutzen ist glaube ich die komplizierteste Methode von allen, da bei jedem neuen Datensatz auch noch ein entsprechendes Recht vergeben werden muss. Zusätzlich muss für jede Gruppe von Benutzern ein Datenbank-Benutzer gepflegt werden, wenn nicht sogar für jeden Benutzer selbst und für jeden neuen Nutzer müssten dann alle Rechte aller Datensätze gesetzt werden. Macht das Sinn? Ich befürchte nein.

Die einfachste Methode ist wahrscheinlich bei jedem Aufruf als erstes eine Art SessionID zu übergeben, anhand der die Validität der Abfrage überprüft wird (gegebenenfalls noch zusätzlich mit einer Prüfsumme, die ebenfalls übergeben wird). Wie solche Sicherungsmechanismen funktionieren ist glaube ich weitgehend bekannt, zumindest wenn man sich in PHP schonmal mit Login-Systemen beschäftigt hat.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2008, 23:45 Nach oben    #3
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Nein, ich will keine Datenbank-Rechte nutzen, die beispielsweise MySQL bereitstellt. Vielleicht hätte ich etwas mehr ausholen müssen. Es handelt sich ja um Java. Der Server sieht vor, dass wir eine Reihe aus Datenbankelementen haben; das sind ganz normale Java-Klassen bzw. Java-Objekte, kein SQL oder sowas. Was ich nun erreichen würde ist einfach ein Schutz, also die Möglichkeit, bequem im Java-Code (z.B. via Annotations) zu definieren: Diese Methode des Datenobjektes ist geschützt und man braucht ein Recht um sie aufzurufen.

Zitat:
Die einfachste Methode ist wahrscheinlich bei jedem Aufruf als erstes eine Art SessionID zu übergeben, anhand der die Validität der Abfrage überprüft wird (gegebenenfalls noch zusätzlich mit einer Prüfsumme, die ebenfalls übergeben wird). Wie solche Sicherungsmechanismen funktionieren ist glaube ich weitgehend bekannt, zumindest wenn man sich in PHP schonmal mit Login-Systemen beschäftigt hat.
Das nimmt mir das System bereits ab. Die Frage war wirklich nur auf das ACL gerichtet und an welchen Stellen sowas wirklich Sinn macht bzw. wie wird es oft in diversen Systemen umgesetzt.

Beispiel:
Ich habe ein Interface "ChatChannel". Dies hat eine Methode "sendMessage" und eine Methode "kickPlayer". Durch Aufruf der Methoden findet Netzwerkkommunikation statt und ich lande auf dem Gameserver. Der Gameserver holt sich ein Datenobjekt "ChatChannelInfo" und guckt dort, wer im Chat-Raum ist und an wen es die Nachricht weiterleiten muss.

Nun kann man ja theoretisch dem ramework sagen "Methode kickPlayer()" muss geschützt sein. Das Framework nimmt die Arbeit ab und prüft (wie auch immer). Reicht das vom Ansatz her für alle denkbaren Zwecke?
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.01.2008, 00:29 Nach oben    #4
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 553
Standard

Über dieses Thema hab ich mir auch schon mal Gedanken gemacht, allerdings bin ich aus Zeitgründen noch nicht dazu gekommen, das praktisch umzusetzen.

Die Methode, mit der die Rechte überprüft werden, ist zwar an sich nicht soo wichtig, das geht über Annotations (da fehlen mir aber auch Kenntnisse von) oder prinzipiell ne Abfrage direkt in der Methode (ok, das wäre recht unsauber). Ne weiter Möglichkeit wäre ein zentrale Rechtekontrollstelle, dass das Framework also zunächst überprüft, ob der User die Rechte dazu besitzt und dann erst die Methode aufgerufen wird.

Mit "eigenen Rechten" meinst du jetzt spezielle Anwendungsfälle, die von der implementierenden Software angelegt werden (z. B. die Berechtigung, einen Player zu kicken) und nicht, dass ein User (Admin) komplett eigene Rechte erstellen kann (das wäre nämlich schwierig umzusetzten...). Also die Rechte müssten schon im Code vorliegen.

Ich denke mal, es geht (bei einem größeren Umfang) nichts daran vorbei, eine lange Liste von allen möglichen Berechtigungen zu haben, die u.U. benötigt werden, um Aktionen durchzuführen. Im kleineren Masstab kann man auch direkt Berechtigungen für einzelne Aktionen vergeben, aber irgendwann wird das zu aufwändig.
Dann muss zentral, per Annotation oder wie auch immer einer Aktion die dafür nötigen Berechtigungen zugewiesen werden.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.01.2008, 08:18 Nach oben    #5
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Die Rechte selbst kann man ja hierarchisch in einem Baum anordnen. So dass man Bereiche bildet. Rein vom administrativen Aufwand ist das besser, da man dann zwar alles bis ins Detail steuern könnte, aber kan mann auch als Admin einen kompletten Bereich berechtigen.

Und ich meine schon, dass die Rechte selbst von der Anwendung vorgegeben werden, alles andere ist relativ schwierig und nicht immer macht es Sinn, direkt an einer beliebigen Methode ein Recht setzen zu wollen.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45