Какими должны быть ресурсы в ACL? Модели объектов или экземпляры объектов? - PullRequest
0 голосов
/ 21 мая 2009

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 12 августа 2009

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

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

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

0 голосов
/ 21 мая 2009

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

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

...