2015-05-27 24 views
7

Sonata-Admin paketini ACL ile kullanıyorum, ancak program aracılığıyla bazı nesneler oluşturmam gerekiyor. Ancak, oluşturulan varlık için ACL tablolarını doğru şekilde nasıl güncellediğimi anlayamıyorum. Yani her zamanSonata Admin ile programlanmış olarak oluşturulan nesne üzerinde ACL'yi güncelle

php app/console sonata yürütmek zorunda: admin:-üretmek nesne acl'ler elbette değil kalıcı çözüm

.

Burada açıklandığı gibi yapmayı denedim: http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace Bu nedenle, varlığımda DomainObjectInterface uygulayıp getObjectIdentifier yöntemini ekledim.

Ama yürütürken şimdi bir Symfony \ Component \ Güvenlik \ Acl \ İstisna \ AclAlreadyExistsException istisna alıyorum:

php app/console sonat: admin: oluşturmak-nesne-acl

Bu yüzden sonata-admin kullanırken bunu yapmanın doğru yolu olmadığını düşünüyorum. Ancak, dokümanlardaki hiçbir şeyi bulamıyorum.

cevap

2

Tamam, biraz daha hata ayıklamak için biraz zaman aldı ve ben iyi bir çözüm buldum:

oluşturmak istediğiniz nesnenin yönetici sınıfını alın:

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

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

Ve şimdi kullanmak yönetici sınıf nesnesi oluşturmak için:

$whateverAdmin->create($whatever); 

Ya da sadece yönetici sınıf ile ACL güncelleme olabilir size ısrar EntityManager kullanmak istiyorsanız:

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

$whateverAdmin->createObjectSecurity($whatever); 
İlgili konular