Я создаю небольшой проект symfony, как и для собственного назидания, как и все остальное.Проверка класса ACL в шаблонах Twig
У меня есть класс сети, который расширяет Entity в настройке ORM доктрины и кучу пользователей (также сущности в настройке Doctrine). Я дал некоторым пользователям разрешение CREATE в классе Network, и это, кажется, работает. По крайней мере исключение, когда я ожидал:
$securityContext = $this->get('security.context');
$objectId = new ObjectIdentity('class', 'Acme\\AcmeBundle\\Entity\\Network');
if(false === $securityContext->isGranted('CREATE', $objectId)) {
throw new AccessDeniedException("You do not have permission.");
}
Но я хотел бы, чтобы проверить разрешение в шаблоне веточку, что-то вроде этого:
{% if is_granted('CREATE', 'Acme\\AcmeBundle\\Entity\\Network') %}
<li>
<a href="{{ path('network_new') }}">
Create a new entry
</a>
</li>
{% endif %}
Моя цель здесь это только шоу ссылка, если у пользователя есть разрешение на создание новой сети. Но вызов is_granted(), кажется, возвращает true для всех пользователей, а не только те, которые я явно предоставил CREATE, или, по крайней мере, ссылка всегда появляется даже для пользователей, у которых нет записей ACL/ACE для сети класс.
Но действительно кажется, что должен быть лучший способ. – Michael
Я не уверен, что это может помочь; но вы пробовали его с выражением в 'is_granted'? http://symfony.com/doc/current/book/security.html#complex-access-controls-with-expressions – Javad
Я счастлив попробовать это, я просто не знаю, каково будет выражение на самом деле. – Michael