围绕 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();
    //.....
}

希望对您有所帮助