Короче говоря: почему 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, ответьте также!
Большое спасибо.