围绕 Sonatas 管理扩展设置安全性
Putting Security around Sonatas Admin Extensions
我想在 sonata admin 中保存页面时添加一个 'quick publish' 功能 - 此功能需要锁定到某些具有正确 'role' 或 'permission' 的个人。
我最初尝试更改基本模板以添加表单按钮并在 PageAdmin postUpdate/postPersist 函数中完成所有操作,但觉得这有点太乱了。
我现在已经考虑使用 AdminExtension - 这样做意味着从表单中删除按钮,因为我真的不想为这一更改覆盖模板。为此,我添加了一个 configureFormFields 函数:
public function configureFormFields(FormMapper $formMapper)
{
$formMapper->with('Options')
->add('quickPublish', 'checkbox', [
'label' => 'Quick Publish',
'required' => false,
'help' => 'Checking this will automatically publish the changes'
])
->end();
}
然后我在此处添加了我的 postPersist 和 postUpdate 函数,它们将进行必要的更新。
public function postPersist(AdminInterface $admin, $object)
{
if ($object->getQuickPublish()) {
$this->quickPublish($object);
}
}
我面临的问题是,我只想根据安全角色将此管理扩展 运行,而不是一直如此。
在 postPersist 和 postUpdate 中这不是问题,因为我可以使用 $admin->isGranted('QUICK_PUBLISH)
但是 $admin 在 configureFormFields 函数中对我不可用。
我找不到一种方法来保护管理扩展的安全性,有人知道它是如何工作的吗?我正在使用奏鸣曲 2.x
谢谢
凯文
看看内置的Sonata LockExtension
在 configureFormFields
方法中,您应该能够从 FormMapper
中获取管理对象:
public function configureFormFields(FormMapper $form)
{
$admin = $form->getAdmin();
//.....
}
希望对您有所帮助
我想在 sonata admin 中保存页面时添加一个 'quick publish' 功能 - 此功能需要锁定到某些具有正确 'role' 或 'permission' 的个人。
我最初尝试更改基本模板以添加表单按钮并在 PageAdmin postUpdate/postPersist 函数中完成所有操作,但觉得这有点太乱了。
我现在已经考虑使用 AdminExtension - 这样做意味着从表单中删除按钮,因为我真的不想为这一更改覆盖模板。为此,我添加了一个 configureFormFields 函数:
public function configureFormFields(FormMapper $formMapper)
{
$formMapper->with('Options')
->add('quickPublish', 'checkbox', [
'label' => 'Quick Publish',
'required' => false,
'help' => 'Checking this will automatically publish the changes'
])
->end();
}
然后我在此处添加了我的 postPersist 和 postUpdate 函数,它们将进行必要的更新。
public function postPersist(AdminInterface $admin, $object)
{
if ($object->getQuickPublish()) {
$this->quickPublish($object);
}
}
我面临的问题是,我只想根据安全角色将此管理扩展 运行,而不是一直如此。
在 postPersist 和 postUpdate 中这不是问题,因为我可以使用 $admin->isGranted('QUICK_PUBLISH)
但是 $admin 在 configureFormFields 函数中对我不可用。
我找不到一种方法来保护管理扩展的安全性,有人知道它是如何工作的吗?我正在使用奏鸣曲 2.x
谢谢 凯文
看看内置的Sonata LockExtension
在 configureFormFields
方法中,您应该能够从 FormMapper
中获取管理对象:
public function configureFormFields(FormMapper $form)
{
$admin = $form->getAdmin();
//.....
}
希望对您有所帮助