如何访问用户角色在 Symfony2 中的表单生成器类

2022-08-31 00:50:21

我有像这样的字段一样的表格UserType

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

现在我想要,如果登录用户有角色,那么他可以看到像这样的额外字段(ROLE_SUPERADMIN)

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

实际上,我必须为许多领域执行此操作。有没有办法我可以做一些自定义类型,所以如果该类型在那里,那么只有管理员才能看到那些

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


答案 1

非常简单。只需将自定义表单类型设置为服务,具体取决于安全上下文:

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()

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

答案 2

推荐