【问题标题】:Symfony disable form fields depending on user rolSymfony 根据用户角色禁用表单字段
【发布时间】:2017-10-16 15:44:22
【问题描述】:

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

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

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

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

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

你怎么看?

【问题讨论】:

  • 我了解了有关选民的更多信息,我认为这可能是解决方案,只要我知道如何比较用户的角色和文档生命周期的状态以了解哪些字段可以编辑用户登录.
  • 好吧,我编写了一个投票者来检查文档对象状态和登录用户的角色,现在我的问题是,投票者必须与类文档相关联吗?我可以使用上面定义的属性在任何我想要的地方打电话给选民,在我的情况下是“编辑”,但我不知道我做错了什么或不当。是我的第一个选民,请善待我。 XD。我应该发布代码吗?
  • 我之前忘记发帖了,我解决了投票者的问题,授予对我想做的角色的访问权限,最后我与投票者和文档所有者进行了双重检查分别授予对我想要的每个字段的访问权限。如果有人对解决方案或选民感兴趣,我可以发布代码,现在没有时间。

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


【解决方案1】:

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

更好的方法是FormEvents,比如PRE_SET_DATA,您可以在其中添加/删除(不确定修改是否也可用)。

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

基本上你应该尝试以下:

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

并在同一个表单类中创建onPreSetData 方法:

public function onPreSetData(FormEvent $formEvent)
{
    $form = $formEvent->getForm();
    $entity = $formEvent->getData();

    //if user is admin then $form->add(...) like above in with $buildForm->add(...)
}

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多