symfony2: расширение ветки is_granted ('EDIT', комментарий) не работает в цикле foreach - PullRequest
5 голосов
/ 30 марта 2012

Код официального примера ACL работает: http://symfony.com/doc/current/cookbook/security/acl.html

Если я это сделаю, нет проблем ...

{% if is_granted('EDIT', comment) %}
    Edit
{% endif %}

... но если я хочу «Предоставленный доступ» к связанному объекту, он не будет работать.

{% for comment in news.comments %}
    comment.content
    {% if is_granted('EDIT', comment) %}
        Edit
    {% endif %}
{% endfor %}

Я думаю, что расширение ветки не может знать, что «комментарий» является «объектом комментария».

Запрос выполняет поиск "Proxies \ JblNewsBundleEntityCommentProxy" вместо "Jbl \ NewsBundle \ Entity \ Comment":

SELECT a.ancestor_id FROM acl_object_identities o INNER JOIN acl_classes c ON c.id = o.class_id INNER JOIN acl_object_identity_ancestors a ON a.object_identity_id = o.id WHERE ((o.object_identifier = '38' AND c.class_type = 'Proxies\\JblNewsBundleEntityCommentProxy'))

Но я не знаю, как это исправить.

У вас есть решение, пожалуйста?

1 Ответ

9 голосов
/ 30 марта 2012

Исправлено в symfony 2.1 .

Для старой версии 2.0 исправление здесь:

Переопределение ObjectIdentityRetrievalStrategy дляпроверить, является ли объект домена прокси Doctrine

...