Autor Beitrag
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 14.10.11 07:57 
Moin community,
Ich habe ein Projekt mit mehreren Forms.
Nun soll ein gewisses Rechtesystem dafür sorgen, dass der Anwender je nach Recht nur gewisse Forms verwenden kann.
Ich würde am besten für jede Form eine dll haben. Der Nutzer logt sich irgendwo ein, in der Datenbank stehen beispiel die DLLS die der Nutzer verwenden darf.
Nun lädt die Anwendung nur die Dlls und der Anwender darf nur die Forms verwenden.
Um das Rechtesystem sollte es gar nicht (genauso der Login)
Aber um das dynamische laden der dlls und wie man das umsetzen könnte
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 14.10.11 10:14 
Hallo,

welchen Vorteil erhoffst du dir davon, jede Form in eine einzelne DLL zu laden?
Dann benötigst du ja nicht nur die Forms, sondern auch Interfaces, um die einzelnen Forms dynamisch ansprechen zu können (da jede Form ja sicherlich individuelle öffentliche Eigenschaften und Methoden besitzen soll).

Ich habe in einem ähnlichen Projekt es so gemacht, daß jede Form entsprechende Eigenschaften bekommen hat (CanEdit, CanSave etc.) und diese wurden dann bei Aufruf der Form entsprechend gesetzt (d.h. den DB-Zugriff habe ich außerhalb der Forms implementiert). Dabei bin ich aber davon ausgegangen, daß sich Rechteänderungen in der DB erst bei einem Neustart des Programms neu auswirken - denn LIVE-Änderungen können zu eigenartigen Effekten führen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.10.11 10:28 
Zitat:
welchen Vorteil erhoffst du dir davon, jede Form in eine einzelne DLL zu laden?


Vermutlich endlose Ladezeiten. In der Hoffnung das kein User ausreichend Geduld hat und vorher aufgibt ist das System dann absolut sicher;)

Aber im Ernst bei einer Rechteverwaltung sehe ich nicht ein wofür man die Dynamik eines Plugin Systems braucht? Wir dürfen ja wahrscheinlich davon ausgehen das trotzdem immer alles an alle verteilt wird da man vorher nicht weiß mit welchen Rechten sich angemeldet wird. Wo ist dann der Sicherheitsgewinn wenn ich nachdem die Rechte/benutzbaren Dialoge aus deiner Rechtedatenbank geladen wurde die Assemblies erst noch dynamisch lade und nicht nur aus dem vorhanden Pool im Speicher auswähle?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 14.10.11 11:47 
Ralf Jansen hat folgendes geschrieben:

Vermutlich endlose Ladezeiten. In der Hoffnung das kein User ausreichend Geduld hat und vorher aufgibt ist das System dann absolut sicher;)

LOL :zustimm:
dark-destination1988 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 14.10.11 12:17 
naja hintergrund des ganzen,
mein programm besteht wie gesagt aus verschiedenen Forms.
Ziel des ganzen soll es sein mehrere programme (also auch meines) in einem "Hauptprogramm" zu starten, je nach recht kann man dann die verschiedenen programme auswählen. Das heißt ihr seid der Meinung das es wenig sinnvoll ist die forms in einzelne dlls zu packen?
Wenn ich nun einfach mein hauptprogramm mit allen subprogrammen lade und dann einfach dementsprechend button zu disablen, wenn kein recht vorhanden ist, scheint mir aber etwas primitiv.
wie würdet ihr diese thematik lösen?
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 14.10.11 12:41 
Hallo dark-destination1988

user profile icondark-destination1988 hat folgendes geschrieben Zum zitierten Posting springen:
... und dann einfach dementsprechend button zu disablen, wenn kein recht vorhanden ist ...


Ich habe die Rechtezuweisung zu den verschiedenen Programmbereichen in einer SQL-Tabelle hinterlegt, die beim Initialisieren des Programms (UserLogin) die Steuerung der grafischen Oberfläche entsprechend konfiguriert.
Der Systemadministrator kann durch eine Editiermaske die verschiedenen Rechte jederzeit verändern.
Ein kleiner Nachteil dieser Variante ist, dass das Programm auf dem Client bei Änderungen neu gestartet werden muss, damit die neuen Rechte benutzerbezogen wirksam werden.
Ansonsten funktioniert bis jetzt tip top.

_________________
Gruss
mats74
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 14.10.11 12:44 
Hallo dark-destination1988,

ist denn jedes Form ein eigenes Programm?
Arbeiten also die Forms untereinander nicht miteinander (d.h. eine Form ruft eine andere Form auf)?
Und gibt es Unterforms (bzw. Dialoge), welche von verschiedenen Forms benötigt werden (und auch über eine Rechtevargabe verfügen)?

Vllt. solltest du dein konkretes Porjekt hier mal (bei Namen) nennen, damit wir uns besser etwas darunter vorstellen können?

Für diesen Beitrag haben gedankt: dark-destination1988
dark-destination1988 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 14.10.11 12:56 
also mein projekt hat definitiv mehrere forms und der anwender sollte nur einige davon angezeigt bekommen.
Das gesamte so gedacht, wir haben in der firma mehrere programme. und die sollen zusammen in ein Hauptprogramm.
das ganze sollte je nach rechte so gebaut werden, das beispielsweise ein verwalter nur beispielsweise programm 1 und programm 2 aufrufen kann,
aber nicht 3.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.10.11 12:56 
Zitat:
Wenn ich nun einfach mein hauptprogramm mit allen subprogrammen lade und dann einfach dementsprechend button zu disablen, wenn kein recht vorhanden ist, scheint mir aber etwas primitiv.


Ich bin, auch bei Rechten, eher für keep it simpel.

Wo ist der Unterschied(oder die höhere Sicherheit) für dich bei
a.) öffne die Form nur wenn der User die nötigen Rechte hat
gegenüber
b.) lade und öffne die Form nur wenn der User die nötigen Rechte hat

Wenn du einen Programmierfehler beim disablen/enablen der Buttons hast bekommst du in beiden Fällen das gleiche Verhalten. Ich sehe keine Grund für die erhöhte Komplexität.
Wenn du uns keinen Grund nennen kannst, jenseits von das das zu primitiv ist ;), würde ich dir davon abraten.

Für diesen Beitrag haben gedankt: dark-destination1988
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 14.10.11 13:10 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Ich bin, auch bei Rechten, eher für keep it simpel.


Da schliesse ich mich Ralf an.
In meinem Programm geht die Rechtevergabe bis hin zu Textfeldern in einzelnen Panels der Forms.
Der grosse Vorteil dieser Variante des "Vorladens" liegt daran, dass Du dich nur einmal um die Rechtevergabe kümmern musst (beim Initialisieren) und nicht bei jedem Nachladen eines Programmteils.
Dies erspart Dir definitiv viel ärger. Als primitiv würde ich das nicht deklarieren.

_________________
Gruss
mats74

Für diesen Beitrag haben gedankt: dark-destination1988
dark-destination1988 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 14.10.11 13:38 
naja gut,
dann mach ich das mit btns ausgrauen
thx euch dreien
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 14.10.11 14:05 
Im C# SubForum von c-plusplus.de kam die Frage nach Benutzerverwaltung auch heute auf, wo ich dann eine mögliche Lösung bzgl. Button-Ausgrauen bzw. -Ausblenden präsentiert habe.
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 14.10.11 14:28 
Hallo Th69

... ziemlich genau so habe ich es in meinen Programmen auch umgesetzt.
Die Rechtevergabe erfolgt im Konstruktor des jeweiligen Forms.
Dies gibt ein Bisschen Schreibarbeit, danach hast Du aber keinen Aufwand mehr, wenn z.B. neue User oder Usergruppen dazukommen.
Das erledigt dann der Konstruktor des jeweiligen Forms in Bezug auf die Anmeldedaten des ClientPC's.
Das funktioniert einwandfrei. :wink:

_________________
Gruss
mats74
dark-destination1988 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 14.10.11 14:34 
naja das sieht schon ganz gut aus, ich brauch das aber nicht für buttons sondern radmenuitems.
das ganze werd ich dann beim login dementsprechend disablen(je nach eintrag in der Datenbank). Aber danke für deine Variante