| Autor |
Beitrag |
dark-destination1988
      
Beiträge: 178
Erhaltene Danke: 21
|
Verfasst: 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
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
|
|
dark-destination1988 
      
Beiträge: 178
Erhaltene Danke: 21
|
Verfasst: 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
      
Beiträge: 189
Erhaltene Danke: 26
Win 10
VS 2017/19, C++, C#
|
Verfasst: Fr 14.10.11 12:41
Hallo dark-destination1988
dark-destination1988 hat folgendes geschrieben : | | ... 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
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 178
Erhaltene Danke: 21
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      
Beiträge: 189
Erhaltene Danke: 26
Win 10
VS 2017/19, C++, C#
|
Verfasst: Fr 14.10.11 13:10
Ralf Jansen hat folgendes geschrieben : | | 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 
      
Beiträge: 178
Erhaltene Danke: 21
|
Verfasst: Fr 14.10.11 13:38
naja gut,
dann mach ich das mit btns ausgrauen
thx euch dreien
|
|
Th69
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 189
Erhaltene Danke: 26
Win 10
VS 2017/19, C++, C#
|
Verfasst: 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. 
_________________ Gruss
mats74
|
|
dark-destination1988 
      
Beiträge: 178
Erhaltene Danke: 21
|
Verfasst: 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
|
|