Форум → Программирование → PHP для идиотов → Система привилегий
Система привилегий
Страницы: ← Предыдущая страница →
-
-
16 октября 2007 г. 9:16, спустя 7 часов 30 минут 7 секунд
продемонстрируй на примеревсе умрут, а я изумруд -
25 октября 2007 г. 14:42, спустя 9 дней 5 часов 25 минут
up!
Вопрос в тему: должен ли быть в системе "главный администратор", "root", т.е. пользователь обладающий всеми возможными привилегиями, причём эти привилегии для него "неотъемлемы", т.е. никто, даже он сам, не может лишить его права делать что-то в системе.
Как тогда хранить его данные? ведь по идее, для него вообще нет необходимости проверять его права. -
25 октября 2007 г. 14:51, спустя 9 минут 34 секунды
У меня есть.
Обычный юзер с id=1.
Если проверяется привилегия для юзера с id=1, он всегда будет положительная. -
25 октября 2007 г. 15:18, спустя 26 минут 17 секунд
Обычный юзер с id=1.
для меня это тоже обычновсе умрут, а я изумруд -
18 марта 2008 г. 13:28, спустя 144 дня 23 часа 10 минут
Хочу свой вариант предложить
Эмулирую rwx а точнее read write edit
Есть таблица дефолтных прав {admin,user,guest} в ней описано что админ может rwe везде, user может rw- везде а модер может rw- и e в некоторых разделах.
предствим структуру сайта
-root
–cat1
—subcat1
—-subsubcat1
–cat2
—subcat2
для описания такой структуры (я использую javascript hash на самом деле это массив php):
structure = {
admin : {
root : [1,1,1]
},
user : {
root : [1,1,0]
},
moder : {
root : [1,1,1],
cat1 : [1,1,0],
subsubcat1 : [1,1,1]
}
}
это значит что админ может rwe везде, user может rw- везде а модер может rwe везде кроме cat1 и subcat1, а в subsubcat1 тоже сможет редактировать
потом у каждого пользователя есть есть личные разрешения например если может может редактировать в категории cat1 и всех подкатегориях то у него есть разрешение {cat1 : [1,1,1]} , а у другого модера нет разрешения читать cat1 и все что ниже по дереву {cat1 : [1,0,1]}. тут еще одна проверка если пользователь не может читать значит от не может и писать и редактировать. тоесть фактически его прова становяться {cat1 : [0,0,0]}
в результате у каждого пользователя есть два масива. один - общие настройки группы от которых он отталкиваеться, второй личные настройки которыми эти общие права прявяться. в результат можно получить гостя с правами админа и админа с правами гостя.
собственно рекурсией по дереву обходяться все ноды и по двум масивам на них выставляються реальные права. Да. долго, да сложно, НО это делаеться один раз. после чего полученый масив сториться обратно пользователю с датой его создания. и теперь этот пользователь при каждом заходе вызывает его из стора (сессии, бд, откуда угодно)
Теперь предположим что нам надо изменить права пользователя, при нажатии кнопки "сохранить" пользователю поставиться флажок, по которому при следующем логине система пересчитает права этому пользователю. Тоже самое с правами группы, при заходе участника группы у него будет флажок пересчитать права. такой же флажок ставиться при создании новой категирии.
Недостаток системы - нельзя выбрать всех пользователей которые имеют доступ к данной категории.
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!