Hallo Leute,
ich habe ein kleines grundsätzliches Problem, es geht mir aktuell nicht um einen Code sondern um eine Art "Best Practise" Lösung für mein Problem.
Ausgangssituation:
Ich möchte in meiner Applikation eine Art Benutzerrollenmodell implementieren d.h. jeder Benutzer kann n Rollen haben die wiederum mit m Rechten ausgestattet sind.
Die Berechtigungen regeln z.b. ob eine bestimmte View z.b. Verkaufsangebote anzeigt, erstellt, bearbeitet, gelöscht (CRUD) werden darf.
Parallel möchte ich für einige bestimmte Properties z.B. Artikeleinkaufspreis usw. ebenfalls CRUD definieren können.
Natürlich wäre es jetzt simpel wenn man das statisch macht aber der Administrator soll ja eigene Rollen mit bestimmten Rechten erstellen dürfen.
Aktuell haben ich mir in meinem Datenmodell:
tblUser => Alle Benutzer
tblUserGroups => Verfügbare Rollen
tblRoleRights => verfügbare Berechtigungen angelegt.
tblUser n:m tblUserGroups 1:x tblRoleRights
Als 1 Benutzer kann mehreren Gruppen gehören die wiederum unterschiedliche Berechtigungen haben.
Ich hoffe die Ausgangssituation ist verständlich beschrieben.
Hier beginnt mein Problem:
Ich habe mir grundsätzlich überlegt ich könnte die Commands welche die Views aufrufen im CanExecute entsprechend abfragen.
Schwieriger sehe ich das aktuell bei einzelnen Properties.
Ich könnte die entsprechende Property des Controls z.B. Textbox isVisbile oder CanEdit an ein Property im Mainmodel im Modus OneTime binden. Allerdings müsste ich dann für jede Property oder jedes View eine Property im Modell anlegen, das erscheint mir extrem aufwändig.
Somit wollte ich eine Funktion programmieren die auf Basis eines Keys z.B. txtPurchasePrice in der tblRoleRights die Berechtigung prüft.
Damit gibt es aber wiederum das Problem das ich ja irgendwie dem Viewmodel sagen muss welche Property überprüft werden soll. Hierzu müsste ich einen Binding Parameter manuell übergeben.
Alternativ wäre dann noch die Möglichkeit einen Converter zu basteln der das erledigt, dieser müsste dann aber wiederum aufs Viewmodel verweisen...
Bei allen meinen Ideen mache ich mir Sorgen um die Performance.
Kann man das irgendwie über eine Art Unique ID für Properties lösen? View dynamisch aufbauen?
Daher meine Frage hat jemand Erfahrung mit dem Problem und kann mir eventuell einen Guide geben oder eine Idee?
Danke euch.
ich habe ein kleines grundsätzliches Problem, es geht mir aktuell nicht um einen Code sondern um eine Art "Best Practise" Lösung für mein Problem.
Ausgangssituation:
Ich möchte in meiner Applikation eine Art Benutzerrollenmodell implementieren d.h. jeder Benutzer kann n Rollen haben die wiederum mit m Rechten ausgestattet sind.
Die Berechtigungen regeln z.b. ob eine bestimmte View z.b. Verkaufsangebote anzeigt, erstellt, bearbeitet, gelöscht (CRUD) werden darf.
Parallel möchte ich für einige bestimmte Properties z.B. Artikeleinkaufspreis usw. ebenfalls CRUD definieren können.
Natürlich wäre es jetzt simpel wenn man das statisch macht aber der Administrator soll ja eigene Rollen mit bestimmten Rechten erstellen dürfen.
Aktuell haben ich mir in meinem Datenmodell:
tblUser => Alle Benutzer
tblUserGroups => Verfügbare Rollen
tblRoleRights => verfügbare Berechtigungen angelegt.
tblUser n:m tblUserGroups 1:x tblRoleRights
Als 1 Benutzer kann mehreren Gruppen gehören die wiederum unterschiedliche Berechtigungen haben.
Ich hoffe die Ausgangssituation ist verständlich beschrieben.
Hier beginnt mein Problem:
Ich habe mir grundsätzlich überlegt ich könnte die Commands welche die Views aufrufen im CanExecute entsprechend abfragen.
Schwieriger sehe ich das aktuell bei einzelnen Properties.
Ich könnte die entsprechende Property des Controls z.B. Textbox isVisbile oder CanEdit an ein Property im Mainmodel im Modus OneTime binden. Allerdings müsste ich dann für jede Property oder jedes View eine Property im Modell anlegen, das erscheint mir extrem aufwändig.
Somit wollte ich eine Funktion programmieren die auf Basis eines Keys z.B. txtPurchasePrice in der tblRoleRights die Berechtigung prüft.
Damit gibt es aber wiederum das Problem das ich ja irgendwie dem Viewmodel sagen muss welche Property überprüft werden soll. Hierzu müsste ich einen Binding Parameter manuell übergeben.
Alternativ wäre dann noch die Möglichkeit einen Converter zu basteln der das erledigt, dieser müsste dann aber wiederum aufs Viewmodel verweisen...
Bei allen meinen Ideen mache ich mir Sorgen um die Performance.
Kann man das irgendwie über eine Art Unique ID für Properties lösen? View dynamisch aufbauen?
Daher meine Frage hat jemand Erfahrung mit dem Problem und kann mir eventuell einen Guide geben oder eine Idee?
Danke euch.
mfG.
Stephan
Stephan