
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
[x]
Дата
|
|
![]() Unregistered ![]() |
Добрый день, у меня вопрос.
Мне для админки необходимо разграничить доступ для менеджеров, т.е есть несколько разделов на сайте, в которых можно добавлять,редактировать,удалять события и т.д. Одному можно только редактировать какой-то раздел, другому можно редактировать все разделы, третьему управлять раздачей прав и т.д. Как это лучше реализовать, идея - использовать битовые маски, но как лучше их использовать? если запихивать все в одну, то она получается слишком длинная. У кого какие идеи? может кто уже реализовывал такое? Спустя 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-й подход больше нравится ![]() PS. glock, шустрый какой ![]() |
|
![]() |
![]() ![]() ![]() |