嵌入式onetomany实体上的symfony奏鸣曲管理员角色

symfony sonata admin roles on embedded onetomany entities

我有 Symfony 2.3 + Sonata Admin + Sonata User Bundle

我创建了一个实体 Student 和另一个实体 ContactStudentContact 具有一对多关系。我在 StudentAdmin class 中添加了 ContactStudentsonata_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',
                    ))

谢谢!

我理解你的问题,我认为 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',
            )
        );
    }
}