【问题标题】:symfony sonata admin roles on embedded onetomany entities嵌入式 onetomany 实体上的 symfony sonata 管理员角色
【发布时间】:2016-03-05 07:57:08
【问题描述】:

我有 Symfony 2.3 + Sonata Admin + Sonata User Bundle

我创建了一个实体Student,以及另一个实体ContactStudentContact 具有一对多关系。我在StudentAdmin 类中将Contact 添加到Studentsonata_type_collection。我还创建了一组用户Operator 并将所有权限分配给Student,但只有listview 分配给Contact

我的问题是Operator 的任何用户都无法添加或删除Contact(来自学生编辑页面),但他们可以编辑(并保存值)。

有什么建议或例子吗?

一些代码:

分配的角色:

ROLE_SONATA_ADMIN_STUDENT_EDIT
ROLE_SONATA_ADMIN_STUDENT_LIST
ROLE_SONATA_ADMIN_STUDENT_CREATE
ROLE_SONATA_ADMIN_STUDENT_VIEW
ROLE_SONATA_ADMIN_STUDENT_DELETE 

ROLE_SONATA_ADMIN_CONTACT_LIST
ROLE_SONATA_ADMIN_CONTACT_VIEW 

ROLE_ADMIN: ROLE_USER, ROLE_SONATA_ADMIN 


     /**
     * @ORM\OneToMany(targetEntity="MyBundle\Entity\Contact",
                      mappedBy="student",
                      cascade={"persist", "remove"})
     **/
    private $contact;


->add('contact', 'sonata_type_collection',
                    array(
                            'label' => 'Contact',
                            'by_reference' => false,
                    ),
                    array(
                            'edit' => 'inline',
                            'inline' => 'table',
                    ))

谢谢!

【问题讨论】:

  • 你想达到什么目的?您希望具有 Operator 角色的用户添加/删除联系人?您必须添加角色 ROLE_SONATA_ADMIN_CONTACT_CREATE、ROLE_SONATA_ADMIN_CONTACT_DELETE
  • 英语不是我的语言,也许我拼错了什么。使用我分配的角色,当我在学生编辑页面中时,操作员用户无法添加或删除联系人(以嵌入式形式),没关系,因为按钮添加/删除消失了,但他可以编辑/更改值(由用户先前添加具有访问权限),因为输入已启用,并且当我保存学生时,这些值将保持联系。我不想要那个。我有其他用户组。我认为问题在于了解角色如何与相关/嵌入式实体一起工作。

标签: symfony one-to-many roles sonata-admin sonata-user-bundle


【解决方案1】:

我了解您的问题,我认为 Sonata 默认不会处理此问题。

您必须检查当前用户角色并删除联系人字段或在联系人字段上添加只读或禁用属性。

删除联系人字段

protected function configureFormFields(FormMapper $formMapper)
{
    // check if current user has role contact edition
    $hasContactRole = $this->getConfigurationPool()->getContainer()->get('security.context')->isGranted('ROLE_SONATA_ADMIN_CONTACT_EDIT'));
    if ($hasContactRole) {
        $formMapper->add('contact', 'sonata_type_collection',
            array(
                'label' => 'Contact',
                'by_reference' => false,
            ),
            array(
                'edit' => 'inline',
                'inline' => 'table',
            )
        );
    }
}

【讨论】:

  • 太棒了!谢谢你的时间。这是一个优雅的解决方案,它让我对如何覆盖 Symfony/Sonata 未覆盖的区域敞开心扉。
  • 如果它解决了你的问题,你应该接受我的回答,所以它会奖励我的工作并帮助有类似问题的人,这就是 StackOverflow 的工作原理;)meta.stackexchange.com/questions/23138/…
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2020-10-22
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多