2015-05-27 1 views
7

Я использую пакет Sonata-Admin с ACL, но мне нужно создать некоторые объекты программным путем. Но я не могу понять, как правильно обновлять таблицы ACL для созданного объекта. Так что я всегда должен выполнитьОбновление ACL для программно созданного объекта с помощью Sonata Admin

PHP приложения/консоли сонаты: администратор: генерировать объектно-ACL

, который, конечно, не окончательное решение.

Я попытался сделать это, как описано здесь: http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace, поэтому я реализую DomainObjectInterface в моей сущности и добавил метод getObjectIdentifier.

Но теперь я получаю исключение \ исключение Symfony \ Component \ Security \ Acl \ AclAlreadyExistsException при выполнении:

PHP приложение/консоли сонатную: админ: генерировать объектно-ACL

Так что я думаю, что это не правильный способ сделать это при использовании sonata-admin. Но я ничего не могу найти в документах.

ответ

2

Хорошо, я взял некоторое время, чтобы отладить немного больше, и я думаю, что я нашел хорошее решение:

Получить класс администратора объекта, который вы хотите создать:

$whateverAdmin = $this->get('app.admin.whatever'); 

//create the object 
$whatever = new Whatever(); 
$whatever->setName('test'); 

И теперь использовать класс администратора, чтобы создать объект:

$whateverAdmin->create($whatever); 

Или, если вы хотите использовать EntityManager упорствовать вы можете просто обновить ACL с классом администратора:

$em->persist($whatever); 
$em->flush(); // important to flush first so an ID ist generated 

$whateverAdmin->createObjectSecurity($whatever); 
Смежные вопросы