Как я могу получить доступ к роли пользователя в классе Form Builder в Symfony2

У меня есть форма как UserType с полем, подобным этому

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

Теперь я хочу, чтобы, если у зарегистрированного пользователя есть роль (ROLE_SUPERADMIN) тогда он может видеть дополнительные поля, подобные этому

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

На самом деле, я должен сделать это для многих полей. есть ли способ сделать какой-то пользовательский тип, так что если этот тип есть, тогда только админ может видеть таких, как

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

Related of "Как я могу получить доступ к роли пользователя в классе Form Builder в Symfony2"

Довольно просто. Просто создайте свою настраиваемую форму, в зависимости от контекста безопасности:

 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'; } } 

Затем отметьте класс как услугу специальным тегом form.type :

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

В вашем контроллере вместо того, чтобы делать new UserType() , grap сервис из контейнера:

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