Ankündigung

Einklappen
Keine Ankündigung bisher.

Symfony: UserProvider und eigene Rollen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Symfony] Symfony: UserProvider und eigene Rollen

    Hallo zusammen

    Ich habe ein Problem mit Symfony. Und zwar werden, scheinbar, meine Sessions falsch unserialisiert.

    Die Ausgangslage:
    Ich habe eine neue Rolle ROLE_SUBSCRIBER erstellt.
    PHP-Code:
    class SubscriberRole extends AbstractRole {

        public function 
    getRole() {
            return 
    'ROLE_SUBSCRIBER';
        }

    Diese Rolle wird der LoginEntity in einem eigenen UserProvider zugewiesen:
    PHP-Code:
    class LoginEntity {
        
    /**
         * @param \Symfony\Component\Security\Core\Role\Role[] $roles
         */
        
    public function setRoles(array $roles) {
            if (!
    is_array($this->roles)) {
                
    $this->roles = [];
            }
            foreach (
    $roles as $role) {
                if (!
    in_array($role$this->roles)) {
                    
    $this->roles[] = $role;
                }
            }
        }
    }
    // im UserProvider
    $User->setRoles([new SubscriberRole(), 'IS_AUTHENTICATED_FULLY']); 
    Das sieht danach super aus, der Login funktioniert soweit auch. Allerdings wird danach bei der Weiterleitung irgendetwas komisch zurückgewandelt. Im AccessListener erhalte ich den korrekten User (mit den korrekten Rollen), allerdings setzt er die LoginEntity im Attribut *roles* ein. Ich komme trotz Debugging in den Symfony-Untiefen nicht zu einem Entschluss, wieso das so passiert (oder: wo das passiert). Das Bild aus dem Debugger: https://hostr.co/1F0QLwOccbn1

    Hat mir jemand einen Tipp, wo ich ansetzen muss?
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

  • #2
    Arbeitest du mit FOSUser? Ich bin mir grad nicht sicher ob Symfony vorsieht unter "roles" im User "Role-Objects" abzuspeichern. Ich kenns nur mit Strings.

    Kommentar


    • #3
      Nee, ich finde das FOSUser zwar gut, es trifft leider meine Anforderungen nicht genau (die Software ist "nur auf Einladung" und ein paar andere, individuelle Dinge). Deshalb habe ich das selber gemacht.

      Ja, intern wird das in ein Role-Objekt konvertiert:

      AbstractToken.php:48
      PHP-Code:
      $role = new Role($role); 
      [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

      Kommentar


      • #4
        Wieso arbeitest du mit einer eigenen Rolle? (Objekt-technisch)

        Kommentar


        • #5
          Ich wollte das ausprobieren, im Moment ginge es auch ohne, für später kann es eine Anforderung werden. Ich möchte z.B. Premium-User und reguläre User unterscheiden.


          Gesendet von iPhone mit Tapatalk
          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

          Kommentar


          • #6
            Zitat von ChristianK Beitrag anzeigen
            Ich wollte das ausprobieren, im Moment ginge es auch ohne, für später kann es eine Anforderung werden. Ich möchte z.B. Premium-User und reguläre User unterscheiden.


            Gesendet von iPhone mit Tapatalk

            Warum müssen dafür Unterschiedliche Klassen her? Würde es nicht reichen ein normales Role-Object zu machen mit ROLE_PREMIUM?
            Zitat von derwunner
            "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

            Kommentar


            • #7
              Das sehe ich genau so wie CrocoBlack. Die Rollen sind wie gesagt nur Strings.

              Kommentar


              • #8
                Ok, das beantwortet meine ursprüngliche Frage zwar nicht löst aber dennoch das Problem. Ich werde das wohl so lösen, wie von CrocoBlack vorgeschlagen.

                Danke trotzdem.
                [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                Kommentar


                • #9
                  [MOD: Verschoben von PHP-Fortgeschrittene]
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar

                  Lädt...
                  X