Gruppen eines Users abfragen

This forum was archived to /woltlab and is now in read-only mode.
  • Hallo Community,


    Ich bastle gerade an einem Icingaweb 2 Modul und möchte eine Art Editiersystem etablieren. Eigentlich recht simpel:

    Du gehörst zur Gruppe Editor -> Alles gut und du kannst die ganzen Einstellungen sehen und verändern.

    Du gehörst nicht zur Gruppe Editor -> Du siehst nur die Werte, kannst aber nichts einstellen.

    Ich habe soweit auch keine Probleme voranzukommen nur habe ich ein Problem damit die Gruppen des Nutzers auszulesen.

    In der Doku ist eine Funktion getGroups() vermerkt die genau das tun soll und die Gruppen in ein Array returned, aber das funktioniert nicht so ganz.

    Der Befehl den ich bis jetzt ausprobiert habe im Controller ist folgender:

    PHP
    1. $this->view->gruppe = Auth::getInstance()->getUser()->getGroups();

    Die Variable ist ein Array und kann auch ohne Fehler ausgelesen werden in der View mit mit der Variable $gruppe , jedoch ist das Array immer leer.

    Wie würde ich an die Sache herangehen um eine Gruppe eines Benutzers auslesen zu können? Vielleicht übersehe ich irgendwas.


    Ich habe mehrere Dinge probiert, in der View, im Controller oder alles in einer Zeile, nur es will irgendwie nicht.
    Vielleicht könnt ihr mir da helfen.



    Danke schon mal im voraus.

    Marco

  • HI Marco,


    mir hat dieser Blogeintrag sehr geholfen die Rechte in Icingaweb2 zu verstehen.

    Icingaweb2 benutzt aber keine Gruppen mehr, sondern Rollen. Da wird dann definiert was ein User, der diese Rolle hat, dann machen darf und was nicht.



    Grüße,

    Carsten

  • Hallo Carsten,

    danke für die schnelle Rückmeldung.

    Ich habe mir soetwas schon fast gedacht. Jedoch frage ich mich dann wieso es einen User-Groups Tab unter den Authentication Settings gibt.

    Bei dem Modul das bei dem Blogeintrag den du gesendet hast gebaut wird, wird am Ende das Modul noch einmal in einem tar-Ball zur Verfügung gestellt.

    Probiere ich diese Modul jedoch aus, sehe ich nicht wie beschrieben die jeweiligen Berechtigungen in den Einstellungen um sie bestimmten Nutzern zuzuweisen.

    Quote

    Indem wir die Berechtigung registrieren, ermöglichen wir Icinga Web 2 sie
    z.B. in der Rollen-Konfiguration anzuzeigen. Außerdem haben wir sie
    gleich dem jeweiligen Menü-Eintrag zugewiesen, was dazu führt, dass nur
    Benutzer mit dieser Berechtigung den Eintrag sehen können.

    Ich habe keinen Eintrag in der Rollen-Konfiguration und kann alle Tabs ohne die Berechtigung ansehen.


    Hast du noch eine Idee wie ich es zum laufen bekommen kann? Grundlegend möchte ich eine Nutzergruppe haben die "Editor" heißt. Wenn man Mitglied der Gruppe ist werden Checkboxen zum editieren und auswählen geladen, wenn man nicht zur Grußße gehört ist das nicht der Fall.

    Ich habe grob im Kopf wie ich es realisieren kann aber ich habe ein kleines Problem damit es zu realisieren.


    Vielleicht kannst du mich noch mal in die richtige Richtung führen?


    Danke schon mal im Voraus,


    Grüße,

    Marco

  • HI Marco,


    leg Dir eine Gruppe "Editor" an und eine Rolle Editor. In der Rolle trägst Du bei Gruppen die Editor Gruppe ein.


    In Deinem Module konfigurierst du als erstes welche "Permissions" es anbietet:


    PHP: configuration.php
    1. $this->providePermission('MODULENAME/editor', $this->translate('Allow to Edit configurations'));


    Um dann z.B. den Menüeintrag nur denjenigen Anzeigen die es laut Rolle sehen dürfen:


    PHP: configuration.php
    1. if ($auth->hasPermission('MODULENAME/editor')){   $this->menuSection(N_('Configuration'))->add('Editor Menü')->setUrl('MODULENAME/editor')->setPriority(900);}


    Oder in Deinen Controllern z.B.:


    PHP
    1. $this->assertPermission('MODULENAME/editor');


    Wenn nun ein Benutzer nicht die erforderlichen Rechte hat, kann er nichts machen. Bekommt nur ne Meldung das er nicht die erforderlichen Rechte hat.

  • Hallo Carsten,

    Super! Das hat funktioniert.

    Gibt es auch einen Weg bestimmte Objekte nur mit Berechtigungen anzeigen zu lassen? Z.B einen container? Oder sollte man das lieber nicht tun?

    Mein Gedankengang wäre jetzt einen boolean auf "true" zu setzen und dann zu checken ob der positiv ist um ihn dann anzuzeigen oder ist das ein unsicherer Ansatz?

    Grüße, Marco

  • Hi Marco,


    funktioniert so wie oben beschrieben. Einfach in dein Script einbauen:


    Code
    1. use Icinga\Authentication\Auth;

    Und dann je nach dem wie du es machen willst z.B.


    Code
    1. $auth = Auth::getInstance();
    2. if ($auth->hasPermission('MODULENAME/editor')){
    3. Zeige Knopf/Mädels/Katzenbilder
    4. }


    Ansonsten mal das Video Icinga Camp Berlin 2017 - Icinga Web 2 - How to Write Modules oder den JoNe fragen.

    Ich schau mir auch gerne den Sourcecode der anderen Module an um Ideen zu bekommen wie es funktioniert :)

  • Hallo Carsten,

    Eine Frage noch.

    Code
    1. if($auth->hasPermission('birthday/editor')) = true

    Wenn der Nutzer keine Berechtigung hat, wird immer noch 1 zurückgegeben.

    Wenn der Nutzer berechtigt ist ebenfalls.

    Hast du da eine Erklärung?


    Grüße,

    Marco

  • Hi Marco,


    mach mal einen einfachen test


    PHP
    1. if($auth->hasPermission('birthday/editor')) {
    2. echo "jupp";
    3. } else {
    4. echo "nope";
    5. }

    bei mir funzt das 1a, vorausgesetzt du hast Icingaweb2 beigebracht das es eine Permission gibt


    PHP: configuration.php
    1. $this->providePermission('birthday/editor', $this->translate('Allow to Edit ....'));


    Zum testen leg ich mir immer einen User an der "nur" die eine Berechtigung bekommt.

  • Hallo Carsten,

    es wird immer "nope" returned, woran könnte das liegen? Der Benutzer hat die Berechtigung editor aber es wird nirgends anerkannt. Egal welche Rechte ich einem Nutzer zuweise er kann immemr auf alles zugreifen also irgendwas stimmt da nicht. Hast du eine Idee? Unter den Settings ist alles auf Datenbanken gestellt, ist das der Fehler?


    Ich habe schon an einigen Stellen nachgeschaut konnte aber nichts auffälliges entdecken.


    Grüße,

    Marco


    EDIT: Neu eingeloggt und es ging. Vielen Dank.