Проэктирование БД

tashkentchi

Новичок
Таблица групп: ид, имя
Таблица ролей: ид, имя
Связка групп и ролей: ид_группы, ид_роли

+ моск + google / "Управление доступом на основе ролей"
 

LONGMAN

Dark Side of the Moon..
На пример юзеру User хочу дать модера в форуме (скажем в раздел под id=5) и админа в чате, что делать? нужно создать такую группу у которых будет эти права?
Просто я впервые пишу свой движок и хочу понять суть работы системы "Управление доступом на основе ролей" на примерах. А в гугле я не нашёл практические примеры..
 

tashkentchi

Новичок
Роли - это вроде следующих: "Разрешено заходить в админчасть", "Разрешено редактировать новости", "Разрешено оставлять комментарии", "Разрешено удалять свои комментарии", "Разрешено удалять любые комментарии", "Разрешено входить в модераторский раздел", "Запрещено вставлять картинки" и т.д.

Примеры групп: "Администраторы", "Гости", "Активисты", "Модераторы".

Группе "Администраторы" можно назначить следующие роли: "Разрешено заходить в админчасть", "Разрешено редактировать новости", "Разрешено оставлять комментарии", "Разрешено удалять свои комментарии", "Разрешено удалять любые комментарии", "Разрешено входить в модераторский раздел".

Группе "Гости" можно назначить следующие роли: "Разрешено оставлять комментарии", "Запрещено вставлять картинки".

Группе "Активисты" можно назначить следующие роли: "Разрешено оставлять комментарии", "Разрешено удалять свои комментарии".

Группе "Модераторы" можно назначить следующие роли: "Разрешено оставлять комментарии", "Разрешено удалять свои комментарии", "Разрешено удалять любые комментарии", "Разрешено входить в модераторский раздел".

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

Если система прав очень сложна, то можно еще ввести наследование групп и/или ролей. Хотя я еще никогда не сталкивался с такой необходимостью.

Далее. Можно создать роль: "Разрешено модерировать форум с id=8". Но в описанную мной структуру таблиц ее не уложешь (нет смысла создавать особую группу модераторов для каждого форума). Отслеживание таких ролей следует поручать скрипту, в котором реализуешь модерацию.

Чтобы это стало возможным, твой класс для управления доступом должен быть достаточно гибким. Пример такого класса: Zend_Acl. Могу также дать свою реализацию. Но лучше тебе помучиться и написать свою. Иначе будет очень трудно понять, как с этим работать.
 

LONGMAN

Dark Side of the Moon..
Если честно, итак трудно понять.. Самый хорошый учитель это примеры. Можешь дать свой класс? Буду огромно благодарен
 

LONGMAN

Dark Side of the Moon..
Говорят что zend очен медленный и огромный, предназначен для больших проэктов..
 

tashkentchi

Новичок
Я же не предлагаю тебе пользовать зенд. Я лишь привел пример класса, реализующего RBAC (Управление доступом на основе ролей) по твоей просьбе.
 

LONGMAN

Dark Side of the Moon..
Tashkentchi, спасибо за поддержку, разобрался (сделал чуть по другому но всётаки :)). Сейчас пишу структуру БД форума. Возникли следующие вопросы:
1. Сообшении из всех темах (всех разделов) хранить в одну таблицу или создать на раздел свою таблицу?
2. Что нужно хранить в таблице(ах) сообшении? Всмысле id раздела, id подраздела и id темы, или только id темы а потом с помошью этой id узнать раздел и подраздел?
Мне интересует ваши мнения и как делайте вы.
 

LONGMAN

Dark Side of the Moon..
Для нас - новичков самой трудной задачой является ПРАВИЛЬНО выставлять ключи в таблицах.. Вот столкнулся с проблемой. В таком запросе:
PHP:
SELECT COUNT(*) FROM `letters` WHERE `towhom` = '".$userID."' AND `read` = '0' AND `in` = '1'"
Который делается на каждой странице, лучше выставлять составной ключ типа
PHP:
KEY (`towhom`,`read`,`in`)
?
 

zerkms

TDD infected
Команда форума
по содержанию - да. по порядку - будет зависеть от других запросов.
 

LONGMAN

Dark Side of the Moon..
zerkms
По этой запросе ведь этот порядок ключа правильный?
 

zerkms

TDD infected
Команда форума
LONGMAN
конкретно в этом запросе - да, лучше будет так. но и с любым другим порядком он тоже работать будет.
 

LONGMAN

Dark Side of the Moon..
zerkms
Если поставить составной ключ на поля
PHP:
KEY (`col1`,`col2`)
то в запросе:
PHP:
SELECT ... WHERE `col1` = 5
будет использован ключ `col1`?

-~{}~ 24.04.09 16:39:

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