Что делает AclProvider :: findAcls ($ oids, $ sids)? - PullRequest
0 голосов
/ 25 декабря 2011

Что на самом деле делает AclProvider::findAcls($oids, $sids)?Для меня это возвращает массив (SplObjectStorage<ObjectIdentities>).Как мне получить ACL от них?

ОБНОВЛЕНИЕ

Я пытаюсь получить все ACE для конкретного пользователя, чтобы я мог удалить их.например.При удалении пользователя.Я надеюсь, что я на правильном пути, например, используя правильную функцию?

1 Ответ

2 голосов
/ 26 декабря 2011

AclProvider::findAcls() используется для ACL с пакетной загрузкой.Он используется в тех случаях, когда у вас много разных объектов (в конечном итоге идентификаторы объектов).

Рассмотрим пример

Предположим, у вас есть диапазон категорий, и каждый пользователь может просматривать только их часть.Чтобы заполнить список категорий, которые может просматривать пользователь, мне нужно проверить ACL.

Я бы начал с поиска всех категорий, создания массива идентификаторов объектов ($oids[] = ObjectIdentity::fromDomainObject($category)) и затемвызовите метод findAcl ($acl_provider->findAcls($oids)).Теперь я могу вызвать $this->container->get('security.context')->isGranted('VIEW', $category) для каждого $category, и приложение больше не будет запрашивать базу данных, поскольку ACL был предварительно загружен.


Что касается удаления всех ACE, я думаю, что вы можете удалить весь ACLи ТУЗ также удаляются.Вы бы сделали это, позвонив по номеру $acl_provier->deleteAcl($object_identity)

...