嵌入式onetomany实体上的symfony sonata管理员角色

时间:2015-12-01 11:45:43

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

我有 Symfony 2.3 + Sonata Admin + Sonata用户套装

我创建了一个实体Student和另一个实体ContactStudentContact有一对多的关系。我在Contact课程中添加了Student sonata_type_collection StudentAdmin Operator。我还创建了一组用户Student,并将所有权限分配给list,但仅viewContactOperator

我的问题是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', )) (来自学生编辑页面),但他们可以编辑(并保存值)。

有任何建议或示例吗?

一些代码:

分配的角色:

{{1}}

谢谢!

1 个答案:

答案 0 :(得分:0)

我理解你的问题,我不认为Sonata默认处理这个问题。

您必须检查当前用户角色,并删除联系人字段或在联系人字段中添加readonly或disabled属性。

删除联系人字段

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