Короче говоря: почему Zend ACL поддерживает множественное наследование между ролями, а не ресурсами?
У меня есть большое дерево ресурсов, для которых я хотел бы предоставить разрешения. Раньше я делал это для представления двух разных деревьев. У первого есть общий ресурс каждого типа в дереве. Во втором собраны все экземпляры этих типов, расположенные одинаково. Это означало бы, что если бы вы наложили деревья сверх меры, вы бы обнаружили объекты одного и того же типа на одном уровне. Затем для каждого экземпляра объекта устанавливается общий объект из первого дерева в качестве дополнительного родителя. Это позволяет мне устанавливать разрешения по умолчанию для каждого типа объекта, поэтому каждый экземпляр унаследует их вместо того, чтобы определять их мне, но все же дает мне уточненный, конкретный доступ к каждому экземпляру.
Пример:
На сайте 3 модуля: пользователи, где хранятся профили пользователей и еще много чего. форумы, где проходят оживленные дискуссии на актуальные темы, галереи, где пользователи могут загружать фотографии своих питомцев
Итак, упомянутое выше дерево дженериков будет выглядеть так:
module / | \ user forum gallery / | \ profile topic photo | post
И дерево экземпляров будет выглядеть так:
module_1 / / / | \ \ user1 user2 user3 forum gallery1 gallery2 | | | / \ / \ / \ profile profile profile sub1 sub2 photo photo photo photo | / \ post1 post2 post3
И в ACL каждый экземпляр объекта пользователя будет унаследован от пользователя в первом дереве. Так что по умолчанию я хочу, чтобы все было доступно для чтения, поэтому я разрешаю читать в модуле. Все наследуется от модуля, так что все в порядке. Я также хочу, чтобы пользователи могли редактировать свои профили, поэтому я предоставляю редактирование каждому пользователю в соответствующем профиле, дерево универсальных шаблонов здесь не помогает. Допустим, мои фотогалереи - NSFW, поэтому я не хочу читать о них. При множественном наследовании я могу запретить чтение фотографии любому незарегистрированному пользователю, и это всего лишь одна операция. Без множественного наследования мне приходится просматривать каждую фотографию и отказывать незарегистрированному пользователю в праве на чтение. Если у меня много фотографий, это плохие новости.
Кто-нибудь знает, как это сделать? Это самое гибкое решение, которое я могу придумать. Если вы можете придумать что-нибудь получше, которое можно реализовать с помощью Zend_Acl, ответьте также!
Большое спасибо.