Помогите мне реализовать списки управления доступом для моего веб-приложения PHP. Я использую Zend_ACL специально.
Я хочу, чтобы мелкозернистый, широко используемый контроль над тем, какой конкретный объект (будь то пользователь или группа) имеет доступ к какому ресурсу. Я хотел бы иметь возможность предоставлять доступ к определенному экземпляру ресурса, а также ко всем ресурсам этого типа. Например:
Мой вопрос заключается в следующем: должны ли ACL ссылочные типы ресурсов или конкретные экземпляры? Должен ли я предоставлять пользователям основные привилегии типа ресурса, использующие ACL:
Или я должен создавать ресурсы для всех отдельных экземпляров моих разных типов ресурсов и идти на ярость предоставления, чтобы позволить всем пользователям читать все ресурсы? Кажется довольно грубым.
Мое текущее решение таково: используя наследование ресурсов, создайте родительский самый ресурс без типа, дочерний элемент этого корня для каждого типа, а затем дочерний элемент каждого типа для каждого экземпляра. Это позволяет мне предоставлять по одному конкретному типу и отказывать в нескольких экземплярах или отказывать в определенном типе, но предоставлять на одном экземпляре (например, для пользователя № 2 выше). Это прекрасно сочетает мою систему разрешений, однако мои потребности более сложны. Вскоре типы ресурсов будут вложены. Поэтому я буду разными модулями, которые могут быть родителями или детьми. Пример: модуль фотогалереи на сайте, модуль объявлений с другой более эксклюзивной галереей, находящейся под ним. Я не совсем уверен, что делать, чтобы решить эту проблему. Я все равно хотел бы иметь возможность предоставлять на всех галереях, или только на одну, или просто на несколько фотографий внизу. Имейте в виду, что Zend_ACL не поддерживает множественное наследование ресурсов.
Каков наилучший способ реализации этого? Все с ACL или с использованием некоторой логики, встроенной в каждый модуль?
Я только что ответил на SO995925: Как я должен структурировать свое дерево ресурсов в ACL? и совет, который у меня для вас, совершенно такой же.
Все это в твоей голове – «Галереи объявлений» – это детский ресурс «Фотогалереи». Родители Generic Gallery №1 в «Фотогалереи», а родители «Анонс Галерея» – в «Галереи объявлений». Вы всегда можете добавить еще один шаг родительского ресурса в свою цепочку, если вам нужно снова разделить дерево.
Все еще простая цепочка наследования дерева.
Я думал, что ваш план решения – это то, как работают большинство систем. Файловая система Windows работает именно так. Самая первая система ACL, которую я когда-либо использовал в DCE, работала именно так.
Наследование – это то, что вам нужно выяснить. Наследуете ли вы динамически или в момент создания ресурса?