Intereting Posts
sql-запрос не работает с порядком php: быстрый способ генерации 5-значного числа, еще не находящегося в столбце MySQL db (с уникальным атрибутом) Подпись MAC, найденная в HTTP-запросе, не совпадает с любой вычисляемой интеграцией azure подписи с использованием php Проверьте, не отключен ли пользователь Список всех путей многомерного массива Удаление index.php в CodeIgniter просто работает для URL-адреса контроллера по умолчанию Проверить строку запроса (PHP) Ссылка PHP вызывает повреждение данных open_basedir ограничение в действии ошибка в php-коде Отправка электронной почты с статической страницы html Кодирование / экранирование управляющих символов JSON Проверка файлов cookie и перенаправление с помощью Apache Magento – переопределяющий блок Adminhtml анализ данных из google-карт api v3 с помощью json с php завершать длинные слова или длинные символы, игнорируя теги html

Какими должны быть ресурсы в ACL? Модели объектов или экземпляры объектов?

Помогите мне реализовать списки управления доступом для моего веб-приложения PHP. Я использую Zend_ACL специально.

Я хочу, чтобы мелкозернистый, широко используемый контроль над тем, какой конкретный объект (будь то пользователь или группа) имеет доступ к какому ресурсу. Я хотел бы иметь возможность предоставлять доступ к определенному экземпляру ресурса, а также ко всем ресурсам этого типа. Например:

  • Пользователь # 1 имеет права на редактирование всех сообщений
  • Пользователь №2 является гостевым редактором и имеет права на редактирование после сообщения № 5
  • Группа № 1 (гость) имеет права на чтение во всем
  • Пользователи принадлежат к группе пользователей, которая наследует от гостя.

Мой вопрос заключается в следующем: должны ли ACL ссылочные типы ресурсов или конкретные экземпляры? Должен ли я предоставлять пользователям основные привилегии типа ресурса, использующие ACL:

  • разрешить редактировать пользователя # 1 в сообщении
  • предоставить пользователю №2 не более, чем наследование
  • грантовая группа № 1 читать по всем ресурсам
  • выполнить таблицу исключений для отслеживания грантов и denys по конкретным ресурсам

Или я должен создавать ресурсы для всех отдельных экземпляров моих разных типов ресурсов и идти на ярость предоставления, чтобы позволить всем пользователям читать все ресурсы? Кажется довольно грубым.

Мое текущее решение таково: используя наследование ресурсов, создайте родительский самый ресурс без типа, дочерний элемент этого корня для каждого типа, а затем дочерний элемент каждого типа для каждого экземпляра. Это позволяет мне предоставлять по одному конкретному типу и отказывать в нескольких экземплярах или отказывать в определенном типе, но предоставлять на одном экземпляре (например, для пользователя № 2 выше). Это прекрасно сочетает мою систему разрешений, однако мои потребности более сложны. Вскоре типы ресурсов будут вложены. Поэтому я буду разными модулями, которые могут быть родителями или детьми. Пример: модуль фотогалереи на сайте, модуль объявлений с другой более эксклюзивной галереей, находящейся под ним. Я не совсем уверен, что делать, чтобы решить эту проблему. Я все равно хотел бы иметь возможность предоставлять на всех галереях, или только на одну, или просто на несколько фотографий внизу. Имейте в виду, что Zend_ACL не поддерживает множественное наследование ресурсов.

Каков наилучший способ реализации этого? Все с ACL или с использованием некоторой логики, встроенной в каждый модуль?

Я только что ответил на SO995925: Как я должен структурировать свое дерево ресурсов в ACL? и совет, который у меня для вас, совершенно такой же.

Все это в твоей голове – «Галереи объявлений» – это детский ресурс «Фотогалереи». Родители Generic Gallery №1 в «Фотогалереи», а родители «Анонс Галерея» – в «Галереи объявлений». Вы всегда можете добавить еще один шаг родительского ресурса в свою цепочку, если вам нужно снова разделить дерево.

Все еще простая цепочка наследования дерева.

Я думал, что ваш план решения – это то, как работают большинство систем. Файловая система Windows работает именно так. Самая первая система ACL, которую я когда-либо использовал в DCE, работала именно так.

Наследование – это то, что вам нужно выяснить. Наследуете ли вы динамически или в момент создания ресурса?