![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Resident |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 25.9.2006 Репутация: нет Всего: 0 |
Доброго времени суток! Помогите, пожалуйста, кто разбирается в проектировании баз данных. Решил написать сайтик с использованием Zend Framework, но столкнулся с проблемой динамического управления правилами Zend_Acl. Собственно хочу хранить их (правила) в БД, но чет никак не могу понять как именно их нужно там хранить. Есть Ресурсы и Роли.
Ресурсы - это: Модули, Контроллеры, Действия (контроллеров); Роли - это: Группы пользователей, пользователи; Права доступа определяются следующим образом: Создаётся ресурс модуля (не от кого не наследуется), далее создаются ресурсы контроллеров данного модуля (каждый ресурс контроллера наследуется от своего модуля) и соответственно создаются ресурсы действий контроллеров (каждый ресурс действия наследуется от своего контроллера). И так для каждого модуля. На этом создание ресурсов заканчивается. Далее создаются роли. Сначала создаются роли групп пользователей (не от кого не наследуются), после этого создаются роли пользователей (каждая роль пользователя наследуется от своей группы/групп). Пользователь может быть как в одной группе, так и в нескольких одновременно (множественное наследование ролей). Затем создаются правила ACL. Для каждой группы пользователей и для каждого пользователя задаются права доступа и типы доступа ко всем ресурсам. Вот набросок кода как это примерно должно работать:
Вывод будет следующим: member -> defaultModule = allowed member -> defaultModule::newsController = denied member -> defaultModule::newsController::showAction = denied member -> defaultModule::newsController::showAction (access type "view") = allowed Думаю понятно почему вывод получился именно таким. Так это должно работать в самом коде, но не редактировать же php файлы для того, чтобы поправить права доступа для группы или пользователя. ![]() А вот как запихнуть такое в БД незнаю. Я так понимаю тут должно быть много связанных таблиц, но что, как хз. PS: Привелегий (типа access type "view") может быть тоже много, они не определены заранее. Т.е. в админке можно будет создавать новые привелегии типа: add, delete, update и т.д. Сейчас для меня это проблема №1 и как ее можно решить даже представить себе не могу. У кого есть опыт работы с такими деревьями в БД очень прошу помочь. ![]() Да совсем забыл сказать про СУРБД, используется MySQL5+. Модераторы переместите тему в PHP: Базы Данных. Это сообщение отредактировал(а) Resident - 13.10.2008, 01:21 |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
Да именно так, но ничего сложного в этом нет, не надо боятся связанных таблиц. 1. Возьмите листок бумаги и нарисуйте на нем все сущности: роль, группа, пользователь, etc. Если же сущностей может быть неограниченное количество, то отдельная таблица сущностей. 2. Затем определите какие связи между ними: а. У одного пользователя может быть только одна группа и у одной группы может быть сколько угодно пользователей - связь один ко многим, колонка id группы у пользователей. б. У одной группы может быть много ролей, а у одной роли много групп, следовательно связь много ко многим - relationship-таблица с двумя колонками, id группы и id роли. в. ... 3. Определите колонки и составляйте сами таблицы. Так же можете посмотреть реализацию phpgacl (в частности админку), или просто воспользоватся ею(что бы не изобретать велосипед) вместо/совместно c Zend-овским acl-ом. |
|||
|
||||
ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
Посмотрите статью Zend_Acl and storing roles and resources in a DB
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |