Zend Acl в сервисном слое / навигации - PullRequest
0 голосов
/ 08 мая 2011

Я работаю над приложением "то, что я думал, будет просто", используя Zend Framework.Это мое 4-е приложение с zf, но первое с динамическим ACL.Приложение использует стандартную настройку MVC с Model / Domain Layer, состоящим из Service Layer, для доступа к моим моделям (popo), которые отображаются через Mappers.Для каждой Модели у меня есть соответствующий Сервис и Картограф.Я хотел бы, чтобы моя UserModel реализовала интерфейс Role, а затем все мои службы на основе моделей реализовали интерфейс Resource.Также я хотел бы указать предопределенные привилегии, основанные на статических ролях, но также иметь возможность изменять указанные привилегии для каждого пользователя в зависимости от его роли;

Так, например: I роль «vendor»который по умолчанию имеет доступ к ресурсу invoice с правами «create», «edit» и «view».Таким образом, мой InvoiceService был бы ресурсом «invoice» с методами создания, редактирования, просмотра и удаления (но по умолчанию только администратор ролей может удалить счет.

Для конкретного пользователя с ролью поставщика я хотел быЯ хотел бы иметь возможность отказать в праве на удаление или для другого пользователя с ролью вендора. Мне бы хотелось отказать в праве на редактирование. Это предположение должно быть сохранено каким-то образом и динамически загружено.

мой фактический вопрос (ы). Я поступаю об этом неправильно? Кроме того, как такое решение может быть реализовано с Zend Navigation?

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

Извините, если я сделал дерьмовую работу с моим объяснением, которое было всю ночь.

1 Ответ

0 голосов
/ 12 мая 2011

Да, как сказал Дэвид, вы на правильном пути.Zend_Navigation очень хорошо играет с Zend_Acl.Вы можете определить свою навигацию в файле XML или INI, назначив каждой странице ресурс и необходимые привилегии, а затем добавить ACL и контейнер навигации в помощник вида навигации.Вы также можете установить текущую роль помощника по навигации для того, кто в данный момент вошел в систему, что будет отображать или скрывать элементы навигации на основе ACL.

Я скажу, что определение всех этих страниц в контейнере навигации являетсянемного утомительно и многословно, но не сложно.

Что касается определения вашего ACL, вы можете сделать что-то столь же простое, как определение всех ваших ролей и ресурсов в одном файле php, или вы можете использовать более гибкий подход и хранитьэту информацию в базе данных и построить ACL.Вы определенно хотели бы кэшировать ACL с последним подходом.

...