I want to add a 'quick publish' function when saving pages in sonata admin - this function needs to be locked down to certain individuals with the correct 'role' or 'permission'.
I initially played around with changing the base template to add a form button and doing it all in the PageAdmin postUpdate/postPersist functions but felt this was a bit too messy.
I have now looked at using an AdminExtension - doing this meant removing the button from the form as I didn't really want to overwrite the template for this one change. To do this i've added a configureFormFields function:
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();
}
I have then added my postPersist and postUpdate functions in here that will make the necessary updates.
public function postPersist(AdminInterface $admin, $object)
{
if ($object->getQuickPublish()) {
$this->quickPublish($object);
}
}
The problem i'm facing is that I only want this admin extension to run based on the security roles not just all the time.
In postPersist and postUpdate it isn't an issue as I can use $admin->isGranted('QUICK_PUBLISH)
but $admin isn't available to me in the configureFormFields function.
I can't find a way to put security around the admin extensions, anyone know how this works? I'm using Sonata 2.x
Thanks Kevin
Take a look at the built in Sonata LockExtension
In the configureFormFields
method, you should be able to get the admin object from the FormMapper
:
public function configureFormFields(FormMapper $form)
{
$admin = $form->getAdmin();
//.....
}
Hope this helps