2015-05-27 8 views
7

Używam pakietu Sonata-Admin z listą ACL, ale muszę programowo programować niektóre obiekty. Ale nie mogę dowiedzieć się, jak poprawnie zaktualizować tabele ACL dla utworzonego podmiotu. Więc zawsze trzeba wykonaćZaktualizuj listę ACL dla obiektu utworzonego programowo za pomocą Sonaty Admin

php app/console sonatę: admin: generate-przedmiot-acl

co oczywiście nie jest to trwałe rozwiązanie.

Próbowałem zrobić to, jak opisano tutaj: http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace, więc zaimplementowałem DomainObjectInterface w mojej jednostce i dodałem metodę getObjectIdentifier.

Ale teraz jestem coraz wyjątek \ wyjątek Symfony \ Komponent \ Security \ ACL \ AclAlreadyExistsException podczas wykonywania:

php app/console sonaty: admin: generate-przedmiot-acl

Sądzę więc, że to nie jest właściwy sposób, aby to zrobić, gdy używasz sonata-admin. Ale nie mogę znaleźć niczego w dokumentach.

Odpowiedz

2

Ok, wziąłem trochę czasu do debugowania trochę więcej i myślę, że znalazłem dobre rozwiązanie:

uzyskać klasę administratora obiektu, który chcesz utworzyć:

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

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

A teraz używać klasa administratora, aby utworzyć obiekt:

$whateverAdmin->create($whatever); 

Lub jeśli chcesz użyć EntityManager utrzymywać się może po prostu zaktualizować ACL z klasą admin:

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

$whateverAdmin->createObjectSecurity($whatever); 
Powiązane problemy