2012-08-17 22 views
15

devo il modulo come UserType con il campo come questoCome posso accedere al ruolo utente nella classe Form Builder in Symfony2

->add('description') 
    ->add('createdAt') 

Ora voglio che se l'utente connesso ha un ruolo (ROLE_SUPERADMIN) allora egli può vedere l' campi come questo

->add('description') 
if($user.hasRole(ROLE_SUPERADMIN)) 
->add('createdAt') 

In realtà devo farlo per molti campi. c'è un modo posso fare un certo tipo personalizzato in modo che se quel tipo c'è allora solo amministratore può vedere quelli come

->add('createdAt',"MyCustomType")

risposta

25

Abbastanza semplice. Basta fare digitare il modulo personalizzato di un servizio, a seconda del contesto di protezione:

use Symfony\Component\Security\Core\SecurityContext; 

class UserType extends AbstractType 
{ 

    private $securityContext; 

    public function __construct(SecurityContext $securityContext) 
    { 
     $this->securityContext = $securityContext; 
    } 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     // Current logged user 
     $user = $this->securityContext->getToken()->getUser(); 

     // Add fields to the builder 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'required' => false, 
      'data_class' => 'Acme\HelloBundle\Entity\User' 
     ); 
    } 

    public function getName() 
    { 
     return 'user_type'; 
    } 
} 

Poi contrassegnare la classe come un servizio, con il tag speciale form.type:

services: 
    form.type.user: 
     class: Acme\HelloBundle\Form\Type\UserType 
     arguments: ["@security.context"] 
     tags: 
      - { name: form.type, alias: user_type } 

nel controller, invece di fare new UserType(), grap il servizio dal contenitore:

$form = $this->createForm($this->get('form.type.user'), $data); 
+0

grazie amico, cercherò che – user825904

+0

argomenti: [ "@ security.authorization_checker"] dopo sf2.6 http://stackoverflow.com/questions/31221477/symfony2-check-user-role-in-service – Harold

Problemi correlati