ФорумПрограммированиеPHP для идиотов → Система привилегий

Система привилегий

  • speedleader

    Сообщения: 28 Репутация: N Группа: Кто попало

    Spritz 15 октября 2007 г. 14:46, спустя 10 часов 39 минут 45 секунд

    эмулирую систему прав rwx
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 15 октября 2007 г. 22:16, спустя 7 часов 30 минут 7 секунд

    продемонстрируй на примере
    все умрут, а я изумруд
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 25 октября 2007 г. 3:42, спустя 9 дней 5 часов 25 минут

    up!

    Вопрос в тему: должен ли быть в системе "главный администратор", "root", т.е. пользователь обладающий всеми возможными привилегиями, причём эти привилегии для него "неотъемлемы", т.е. никто, даже он сам, не может лишить его права делать что-то в системе.
    Как тогда хранить его данные? ведь по идее, для него вообще нет необходимости проверять его права.
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 25 октября 2007 г. 3:51, спустя 9 минут 34 секунды

    У меня есть.
    Обычный юзер с id=1.
    Если проверяется привилегия для юзера с id=1, он всегда будет положительная.
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 25 октября 2007 г. 4:18, спустя 26 минут 17 секунд

    Обычный юзер с id=1.

    для меня это тоже обычно
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 18 марта 2008 г. 3: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]}

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

    собственно рекурсией по дереву обходяться все ноды и по двум масивам на них выставляються реальные права. Да. долго, да сложно, НО это делаеться один раз. после чего полученый масив сториться обратно пользователю с датой его создания. и теперь этот пользователь при каждом заходе вызывает его из стора (сессии, бд, откуда угодно)

    Теперь предположим что нам надо изменить права пользователя, при нажатии кнопки "сохранить" пользователю поставиться флажок, по которому при следующем логине система пересчитает права этому пользователю. Тоже самое с правами группы, при заходе участника группы у него будет флажок пересчитать права. такой же флажок ставиться при создании новой категирии.

    Недостаток системы - нельзя выбрать всех пользователей которые имеют доступ к данной категории.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!