[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: разграничение доступа
anton
Добрый день, у меня вопрос.

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

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

У кого какие идеи? может кто уже реализовывал такое?



Спустя 24 минуты, 4 секунды (16.10.2009 - 11:54) glock18 написал(а):
anton
Обычно это делается не масками, хотя маски были бы, на мой взгляд, лучшим решением по скорости. С другой стороны маски накладывают ограничение на количество различных прав/групп или чего угодно. одно число может представлять не больше 32 прав доступа пользователя (на 32х разрядных платформах).

Вообще система реализуема на масках, но у меня не было времени это все продумать и реализовать. Как появится - обязательно сделаю.

Обычно такая система реализуется примерно так:
1. создаются таблицы в бд
user (очевидно уже есть)
role
user2role (если нужно, скажем, чтобы пользователь мог иметь несколько ролей)
userAccess (собтсвенно, все к чему можно получить доступ)
role2userAccess
можно еще user2userAccess для выделения доступа отдельным пользователям.

2. Второй вариант, если ролей и правил доступа немного, то права доступа иногда задаются где-то в файле (ну какой-нибудь конфиг или еще чего).

Спустя 7 минут, 23 секунды (16.10.2009 - 12:02) sergeiss написал(а):
Тут есть 2 подхода, друг с другом несовместимых.

1-й - это уже упомянутые битовые маски.
2-й - это использовать для каждого права отдельное логическое поле в таблице в БД.

Я лично сторонник 2-го подхода. Он мне кажется как-то нагляднее и удобнее. Потому что я могу прямой командой в БД изменить что-либо. Я могу легко добавлять новые виды прав и удалять старые (т.е. работать с полями таблицы).
А при 1-м подходе надо обязательно помнить, какой бит за что отвечает. И если что-то удаляется из системы прав, то соответствующий бит "зависает". Если надо что-то добавить, то можем попасть на грабли - на некотором этапе не хватит разрядности.
В первом случае, если мне нужно работать сразу с группой прав, то я могу сделать функцию в БД, которая будет устанавливать/снимать сразу целую группу прав.

Короче говоря, мне 2-й подход больше нравится smile.gif

PS. glock, шустрый какой smile.gif Пока я писал - он уже ответил.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.