2017-01-17 5 views
0

In Sylius (Symfony3-Bundle) habe ich das Registrierungsformular angepasst, um einige Felder hinzuzufügen, insbesondere "Kontentyp" (pro oder privat). Je nach Typ werden einige Funktionen nicht aktiviert. Um dies zu tun, habe ich darüber nachgedacht, Benutzern unterschiedliche Rollen zu geben.In Sylius, wie die Benutzerrolle in Abhängigkeit von Benutzerdaten auswählen?

Da die Authentifizierung von Sylius durchgeführt wird, habe ich mich gefragt, wie das Standardverhalten überschrieben werden kann, um die Rolle entsprechend den Typendaten festzulegen?

Danke für Ihre Hilfe!

Antwort

0

Was ich getan habe:

In Sylius, ein Ereignis sylius.customer.post_register nach Anmeldung gebrannt wird. Ich habe einen Hörer (definiert in services.yml) erstellt:

app.registration_listener: 
     class: AppBundle\EventListener\RegistrationListener 
     tags: 
      - { name: kernel.event_listener, event: sylius.customer.post_register, method: setUserRole } 
     arguments: 
      - "@sylius.manager.shop_user" 

Die ShopUserManager als Argument an die setUserRole Methode übergeben wird.

public function __construct(ObjectManager $userManager) { 
     $this->userManager = $userManager; 
    } 

In dem Hörer, erhalte ich das Objekt Benutzer $ als ‚Subjekt‘ der Veranstaltung:

public function setUserRole(GenericEvent $event) 
    { 
     $customer = $event->getSubject(); 
     $user = $customer->getUser(); 
     .... 
     $this->userManager->persist($user); 
     $this->userManager->flush(); 
    } 

Dann kann ich die $ Benutzer ändern (meine Rolle hinzufügen) und es mit den Speichern ShopUserManager.

0

Sylius hat keine integrierten Rollen oder rbac-System - die gesamte Sicherheitskonfiguration erfolgt mit dem Symfony-Sicherheitssystem. Also, wenn Sie benötigen Funktionalitäten zu unterscheiden, basierend auf Benutzerrolle, nur Basis auf $roles Parameter von User Modell und Sylius Sicherheitskonfiguration mit Ihrem eigenen Firewalls außer Kraft setzen, wie es in Symfony tutorial gesagt. Hoffe, es wird helfen;)

+0

Tks Zaleslaw, aber ich verstehe nicht: die ShopUser ein Sylius Entity ist, also sollte ich es geben, eine Rolle von mir definiert sein können, wenn erstellt wird, nicht wahr? – wyllyjon

+0

Ja, 'ShopUser' ist eine Entität, also sollten Sie in der Lage sein, es zum Beispiel durch ein gut definiertes' ChoiceType'-Feld in Form zu setzen. Wenn Sie die Standardrollen ändern möchten, sollten Sie die Entität "ShopUser" in Ihrer App außer Kraft setzen (standardmäßig ist dies die Rolle "ROLE_USER"). Man denke nur an '' $ roles'' Eigenschaft als jede andere Eigenschaft, ein Feld für sie machen und es in Form wählen;) – Zaleslaw

+0

Ich bin nicht sicher, ob ich verstehe, aber ich will nicht die Rolle in Form gewählt werden vom Benutzer. Ich habe bereits das 'type'-Feld im Formular, und entsprechend dem ausgewählten Wert bewillige ich dem Benutzer eine Rolle. In dem Registerformular ist das verwendete Modell "Kunde" und ShopUser hat ein "Kunden" -Attribut. Was ich getan habe, überschreibe ShopUser, setze setCustomer außer Kraft, und innerhalb dieser Methode, teste das Attribut 'type' und rufe 'addRole' auf. Aber ich habe immer noch die Standardrolle und nicht die neuen. Ich sehe nicht, welche andere Methode überschrieben werden kann, um meine Rollen korrekt hinzuzufügen – wyllyjon

Verwandte Themen