2010-08-13 3 views
1

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

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

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 к сделай это. Какой был бы самый эффективный способ сделать это?

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

+0

Да, конечно, это возможно. Zend_Acl очень гибкий. Вы можете получить пользовательские роли и разрешения из базы данных, xml-файла или всего, что захотите. Вы можете даже жестко запрограммировать их, но это не очень обычно. –

ответ

0

Основная структура позади 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 очень гибкий, и я согласен с тем, что руководство могло быть написано с большим количеством примеров и лучших практик, но, в конце концов, это не так сложно разобраться в этом.

+0

Есть ли способ загрузить это из базы данных MySQL (или модели)? – Ben

+0

Поскольку логика ACL отличается от приложения к приложению, Zend_Acl напрямую не поддерживает загрузку данных из базы данных. Вы должны сделать это за 2 шага: a) загрузить данные из db; б) проанализировать данные и заполнить Zend_Acl. Однако это не ошибка. –

1

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

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

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

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

Я честно не могу сказать, если это ответ или вопрос. – LittleBobbyTables

Смежные вопросы