У меня проблема с тузами класса. Я создал туза для класс следующим образом:
$userIdentity = UserSecurityIdentity::fromAccount($user);
$classIdentity = new ObjectIdentity('some_identifier', 'Class\FQCN');
$acl = $aclProvider->createAcl($classIdentity);
$acl->insertClassAce($userIdentity, MaskBuilder::MASK_CREATE);
$aclProvider->updateAcl($acl);
Теперь я пытаюсь проверить права пользователя. Я нашел этот путь делать вещи, которые не документированы, но дает ожидаемые результаты на основе класса:
$securityContext->isGranted('CREATE', $classIdentity); // returns true
$securityContext->isGranted('VIEW', $classIdentity); // returns true
$securityContext->isGranted('DELETE', $classIdentity); // returns false
Этот метод хорошо адаптирован к проверке разрешений "CREATE", где нет доступного экземпляра объекта для перехода к методу. Однако, должно быть возможно проверить, предоставлено ли другое разрешение на конкретный экземпляр:
$entity = new Class\FQCN();
$em->persist($entity);
$em->flush();
$securityContext->isGranted('VIEW', $entity); // returns false
В этом случае сбой теста. Я ожидал, что пользователь, у которого есть маска разрешения для класса будет иметь одинаковые разрешения для каждого экземпляр этого класса, как указано в документации ("The PermissionGrantingStrategy сначала проверяет все ваши ACE-объекты, если ни один не применим, будут проверены ACE класса. "), но это похоже, не здесь.