Symfony根据用户rol

时间:2017-05-17 09:12:57

标签: forms symfony readonly user-roles disabled-input

我正在开发symfony中的应用程序,以跟踪文档的工作流程。在文档的生命周期中,参与各个部门,我的意思是,每个部门的人员都有自己的角色(ROLE_USERROLE_SYSTEMS ...)。我对所有这些形式都有相同的形式,但是在文档生命周期的不同状态中,其中一个必须完成特定的字段,其余的将是禁用或只读。

我想知道在Symfony中执行此操作的最佳方法是什么,检查角色并禁用用户在生命周期的每个时刻都无法编辑的文件。

我已经调查并为我的twig模板找到了类似的东西,但我必须为每个字段和每个角色执行此操作,我不知道是否可以将其应用于字段属性,如disabled或readonly,是吗?

{{% if is_granted('ROLE_ADMIN') %}
    <a href="...">Delete</a>
{% endif %}

我也听说过选民,但我不清楚它是如何运作的,以及它是否适合我的情况。

您怎么看?

1 个答案:

答案 0 :(得分:0)

简单但丑陋的方式是不同的表单类型(只是为了找出哪些字段是必要的,哪些字段不是,但它是可选的)。

更好的方法是PRE_SET_DATA,例如public function buildForm(FormBuilderInterface $builder, array $options) { // Add your general fields which are available for all //$builder->add(...) // at the end add an EventListener $builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData']); } ,你可以添加/删除(不确定modifien是否也可用)。

Look here to find out more -> How to Dynamically Modify Forms Using Form Events

基本上你应该尝试以下:

onPreSetData

并在同一个form-class中创建public function onPreSetData(FormEvent $formEvent) { $form = $formEvent->getForm(); $entity = $formEvent->getData(); //if user is admin then $form->add(...) like above in with $buildForm->add(...) } 方法:

search