Benutzerverwaltung



  • Ok, aber das bedeutet, dass ich das ganze wirklich bei jedem Button oder Funktion, die nicht für alle User gedacht ist, prüfen muss?

    Hätte eigentlich auf Benutzergruppen geprüft und nicht auf einzelne User ... wobei ich dann eben nicht sicher bin, wie ich das umsatzen soll, wenn ein User in mehrern Gruppen Mitglied ist ...



  • Hast du nicht gelesen was ich geschrieben hab, oder verstehst du das Prinzip einer Datenbank nicht?



  • Er muss aber trotzdem die GUI an die individuellen Rechte anpassen und das ist der Punkt wo es hässlich wird.

    Das passiert ja nicht automatisch durch ein wenig Datenbank-Magie im Hintergrund.

    @Bonaqua
    In den Gruppen sehe ich nicht so das Problem. Nur wenn sie sich widersprechen: Gruppe A darf in FormX, Gruppe B darf nicht in FormX und ein User liegt in beiden Gruppen. Dann ist aber das Gruppenschema an sich defekt.



  • Das denke ich doch auch, allein in der DB was festlegen reicht ja nicht - das ganze sollte auch auf die GUI angewendet werden.


    Das ist genau das Problem, an dem ich hänge ... 😞
    Eine Überlegung wäre dann eine neue Gruppe anzulegen, die eben die Rechte so gesetzt bekommt ... hätte dann nur die Angst, dass am Ende jeder User eine eigene Gruppe hat und das wäre ja nicht der Sinn der Sache.



  • Wenn die Gruppenzugehörigkeit die Benutzerrechte nur erweitert und nicht beschränkt, hast Du keine Probleme mehr.

    Würde das in deinem Fall passen?



  • Ja, das würde bei mir zutreffen.



  • Wie würde das dann Eurer Meinung nach ausschauen?!

    Soll ich vor einem Aufruf immer auf das entsprechende Recht prüfen?
    In diesem Beispiel wäre es z.B. das Anlegen eines neuen Produktes und mein Recht wäre "add_row".
    Dann in meiner Klasse auf den user, gruppenzugehörigkeit, recht und die zugehörige gui geprüft und erhalte true oder false zurück.
    Würde dann etwa wie folgt aussehen ...

    private void btnAddProdukt_Click(object sender, EventArgs e)
    {
    //Prüfung auf Schreibrechte  - add_row
    if (right == true)
    {
    //Aktion durchführen
    }
    if (right == false)
    {
    //Passiert nichts ...
    }
    }
    

    Wenn ich nun aber den Button gar nicht erst anzeigen lassen möchte,
    sollte ich dies ja direkt nach InitializeComponent(); machen, oder?

    Dabei müsste ich dann ja (wenn es mehr als nur die Buttons betrifft) fast jedes Steuerelement durchgehen?!?!
    Falls ja, wie kann man das über die Rechte am besten lösen? Kann ja nicht für jedes Steuerelement ein Recht vergeben - oder doch?



  • So wie ich das sehe, sind die Buttons abhängig von den Rechten der User, also schätze ich, dass du das schon machen musst. Da ich solch ein Problem noch nicht hatte, weiß ich nicht, ob ich dir optimale Lösung dazu geben kann. Aber ich würde wohl versuchen, alle Buttons in eine Collection zu bekommen und dem User entsprechened die Werte in einer Schleife setze.



  • µ schrieb:

    Er muss aber trotzdem die GUI an die individuellen Rechte anpassen und das ist der Punkt wo es hässlich wird.

    Das ist klar, aber er muss dann nicht jeden User selbst abfragen, sondern halt nur der Gruppe die Rechte zuordnen. Schreibarbeit ist das schon, aber bei weitem nicht so viel wie jeden User selbst eintragen im Code.

    Das mit den mehreren Gruppen kannst du lösen mit primärer und sekundärer Gruppe, wobei man nur in einer primären Gruppe sein kann, aber in mehreren sekundären Gruppen. Die primäre Gruppe hat natürlich priorität, sprich wenn der User in Gruppe A ist, und die etwas nicht darf, er aber gleichzeitig in Gruppe B ist, die das darf, dann kann er es trotzdem nicht machen, weil seine primäre Gruppe A und nicht B ist. Wenn der User das dann trotzdem dürfen soll, muss er seine primäre Gruppe wechseln.



  • Hallo Bonaqua,

    du mußt ja irgendwie eine Zuordnung "Rechte -> Aktionen" haben.
    Wenn du ein Objekt für deine Rechte (entsprechend des Users bzw. dessen Gruppe) hast, dann schreib dir einfach eine Methode, welche direkt im Konstruktor aufgerufen wird:

    public MyForm(Rights rights)
    {
      InitializeComponent();
    
      SetRights(rights);
    }
    
    void SetRights(Rights rights)
    {
      buttonSave.Enabled = rights.CanSave;
      buttonPrint.Visible = rights.CanPrint;
    
      // etc. ...
    }
    

    Statt "Rights" kann man natürlich auch "Authorisation", "Privilege" oder "Access" o.ä. benutzen...


Anmelden zum Antworten