嵌入式onetomany实体上的symfony奏鸣曲管理员角色
symfony sonata admin roles on embedded onetomany entities
我有 Symfony 2.3 + Sonata Admin + Sonata User Bundle。
我创建了一个实体 Student
和另一个实体 Contact
。 Student
与 Contact
具有一对多关系。我在 StudentAdmin
class 中添加了 Contact
到 Student
和 sonata_type_collection
。我还创建了一组用户 Operator
并将所有权限分配给 Student
,但只有 list
和 view
分配给 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',
)
);
}
}
我有 Symfony 2.3 + Sonata Admin + Sonata User Bundle。
我创建了一个实体 Student
和另一个实体 Contact
。 Student
与 Contact
具有一对多关系。我在 StudentAdmin
class 中添加了 Contact
到 Student
和 sonata_type_collection
。我还创建了一组用户 Operator
并将所有权限分配给 Student
,但只有 list
和 view
分配给 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',
)
);
}
}