Autor Beitrag
JohnDyr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56
Erhaltene Danke: 1

Win 10
C# (VS 2017)
BeitragVerfasst: So 25.11.18 15:43 
Hallo,

ich entwickle grade ein Programm, bei welchem mehrere Benutzer angelegt werden können. Jedem Benutzer kann eine Benutzergruppe zugewiesen werden (Admin, User). Mein Vorhaben ist, dass der Benutzer aus der Gruppe "User", nur bestimmte Elemente im Programm sehen darf.

Wird das ganz stumpf über so etwas wie...

ausblenden Quelltext
1:
2:
3:
if Benutzergruppe=USER
   Element.Visible = false;
endif


abgebildet? Oder gibt es da elegantere / andere Lösungen, welche gängig sind?

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 26.11.18 12:14 
Kommt drauf an.

Das sich das Rollenverhalten nur daran festmacht was ein bzw. auszublenden ist eher selten. Meistens ist es komplizierter.
Alternativen sind gleich 2 UIs zu haben. Wenn man Logik und UI sauber getrennt hat ist der Aufwand nur begrenzt und gibt dir deutlich mehr Möglichkeiten.

Eine andere Möglichkeit wäre einen Extender Provider zu schreiben. Ein Extender Provider ist eine nicht visuelle Komponente die man auf eine From werfen kann und jeder Komponente (scheinbar) Properties hinzufügt. Über so einen Extender Provider kannst du den entsprechenden allgemeinen Code an dieser Komponente zentralisieren und die Sichtbarkeiten dann über den Winfomrs Designer einstellen.
JohnDyr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56
Erhaltene Danke: 1

Win 10
C# (VS 2017)
BeitragVerfasst: Mo 26.11.18 14:05 
Zitat:

Alternativen sind gleich 2 UIs zu haben. Wenn man Logik und UI sauber getrennt hat ist der Aufwand nur begrenzt und gibt dir deutlich mehr Möglichkeiten.


Zu diesem Punkt hätte ich eine Nachfrage: Ich entwickle also zwei UIs mittels UserControls. Sagen wir mal UcDashboardUser und UcDashboardAdmin. Die Logik ist ausgekapselt in einer anderen Klasse, worauf beide UCs zugreifen. Soweit, so gut. Wenn jetzt der Admin eingeloggt ist und er den UserControl öffnen will, erscheint das UcDashboardAdmin, indem folgende Logik ausgeführt wird:

ausblenden Quelltext
1:
2:
3:
4:
5:
(Pseudocode):

if (benutzer.gruppe = "ADMIN")
   UcDashboardAdmin.BringToFront()
endif


Verstehe ich das richtig? Oder meinst du es anders?

Danke,
JohnDyr
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 26.11.18 16:56 
In etwa.

Persönlich würde ich nicht alle UserControls auf der Form rumliegen haben sondern sie erst dann erzeugen wenn ich sie brauche und die die man dann nicht mehr braucht auch gleich wieder zerstören.
Z.B. wenn man immer nur ein zentrales UserControl anzeigt
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if (benutzer.Group == UserRoles.Admin)
{
   if (shownUserControl != null)
   {
       parentControl.Controls.Remove(shownUserControl);
       shownUserControl.Dispose();
       shownUserControl = null;
   }
   shownUserControl = new UcDashboardAdmin();
   shownUserControl.Data = myLovelyDataModelIWantToShowOnTheUserControl;
   shownUserControl.Dock = Dock.Fill;   
   parentControl.Controls.Add(shownUserControl);
}


Das ganze kann man dann schön noch in eine Methode refactorn der man nur den Typ des anzuzeigenden UserControls übergibt und das zu benutzende Datenmodel.

Für diesen Beitrag haben gedankt: JohnDyr