Пользовательские динамические разрешения с Zend_ACL - PullRequest
1 голос
/ 13 августа 2010

Можно ли назначать пользователям индивидуальные разрешения на основе динамических элементов в приложении Zend Framework?

У меня есть такие таблицы:

clients (id, name, contact_name, contact_number, logo, active)
modules (id, client_id, module_id, active)
permissions (id, user_id, client_id, module_id)
users (id, username, password, email, realname)

Что мне нужно сделать, так это разрешить определенному пользователю доступ к определенному модулю для каждого отдельного клиента, но я не могу найти какой-либо способ заставить Zend_ACL сделать это. Какой самый эффективный способ сделать это?

Редактировать: Извинения, я забыл добавить детали. Я должен разрешить администратору предоставлять и отзывать разрешения от пользователей в интерфейсе администрирования.

Ответы [ 3 ]

2 голосов
/ 03 февраля 2011

Посмотрите на этот пост, так как я думаю, что он может иметь то, что вы хотите. К вашему сведению, это третья часть серии, но она больше относится к тому, что вы просите.

http://codeutopia.net/blog/2009/02/18/zend_acl-part-3-creating-and-storing-dynamic-acls/

1 голос
/ 02 февраля 2011

Давайте откроем эту тему, это хорошо, чтобы закончить, и это довольно сложно в реализации. Давайте разберемся с вопросом, который у нас есть: Бен: я не знаю, что происходит в вашем проекте, но давайте создадим похожий сценарий, У нас есть сайт для гостей, клиентов, администраторов: Нам нужна таблица в нашей базе данных для сохранения имен ролей, и для каждой роли у нее есть свои разрешения

Roles (idRole, nameRole)
Permissions (We will speak about it later)

Скажем, может быть позже, нам нужно будет установить больше ролей для нашего приложения, поэтому мы установим страницу для администратора, чтобы назначить разрешения для каждой роли (например, Drupal и Joomla), одно из решений состоит в том, чтобы найдите все модули, которые есть в вашем приложении, затем получите контроллеры для каждого модуля и действия для каждого контроллера. и затем мы должны сказать Zend_Acl установить наши роли из таблицы ролей в базе данных, а ресурсы - это модули Zend-> Actions для каждого контроллера. Поэтому нам понадобится таблица для хранения всех модулей, а для каждого модуля нам понадобятся контроллеры и действия

Modules (idModule, nameModule)
Controllers (idController, nameController, idModule_FK)
Actions (idAction, nameAction, descriptionAction, idController_FK)

Поле описания получит его из примера описания действия

/**
* @description := Action to edit Roles
**/
public function editAction {}

Итак, давайте завершим структуру нашей базы данных

Roles (idRole, nameRole)
Permission (idRole, allowedPermission, idAction, dateTimeAssigned)
Modules (idModule, nameModule)
Controllers (idController, nameController, idModule_FK)
Actions (idAction, nameAction, descriptionAction, idController_FK)

Вот общая структура, которую я мог найти до сих пор, я пытаюсь вернуть все модули / контроллеры / действия, когда это будет сделано, я опубликую это здесь (класс плагина), тогда мы попробуем объединить все (вклад для других), чтобы решить эту проблему с Zend_Acl Dynamic.

Следующие шаги: Чтобы создать плагин в Library/App/Action/Helper, если он сделан кем-то, пожалуйста, напишите, чтобы получить общий вклад по этому поводу, Затем мы сосредоточимся на сохранении данных с помощью Doctrine ORM с нашим Zend Project, 3-й шаг - создать контроллер, который динамически создает Zend_Acl из информации базы данных (роль, разрешения, действия).

Любые советы / идеи / предложения, здесь, где следует продолжать до конца.

С уважением,

0 голосов
/ 14 августа 2010

Базовая структура ACL может быть, например, такой:

$acl = new Zend_Acl();

// allow user with ID 1 access reports section for client with ID 4
$acl->allow(
  new Zend_Acl_Role('user_1'),
  new Zend_Acl_Resource('reports'),
  'client_4'
);

// allow administrator access reports module for all clients
$acl->allow(
  new Zend_Acl_Role('administrator'),
  'reports'
);

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

...