ФорумПрограммированиеPHP для идиотов → Группы пользователей и права

Группы пользователей и права

  • Lirck

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

    Spritz 27 мая 2008 г. 10:26

    Есть 2 таблицы:
    TABLE groups
    (
    group_id - группа
    allow_id - разрешение - TABLE allows
    )

    TABLE allows
    (
    allow_id - разрешение
    )


    Получается, что одной группе можно присвоить только одно разрешение, как одной группе присвоить несколько разрешений?
  • md5

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

    Spritz 27 мая 2008 г. 10:30, спустя 3 минуты 43 секунды

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

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

    Spritz 27 мая 2008 г. 10:31, спустя 1 минуту 20 секунд

    или стоп, TABLE groups это таблица с группами и описаниями?
    тогда оттуда надо убрать поле allow_id
    и завести ещё одну таблицу
    TABLE groups_allows
    где будут указываться связки: группа — разрешение
    все умрут, а я изумруд
  • adw0rd

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

    Spritz 27 мая 2008 г. 15:19, спустя 4 часа 48 минут 23 секунды

    это вроде мы уже обсуждали на форуме…
    adw/0
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 28 мая 2008 г. 4:52, спустя 13 часов 32 минуты 4 секунды

    БД:

    CREATE TABLE IF NOT EXISTS Sanctions (
    `Id` INT( 7 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
    `Description` VARCHAR( 250 ) NOT NULL ,
    `Set` TEXT NOT NULL ,
    PRIMARY KEY ( `Id` )
    ) TYPE = MYISAM CHARACTER SET cp1251 COLLATE cp1251_general_ci;

    Основной принцип:



    $guest_sanctions= array(
    'design'=>true,
    'enter'=>true,
    'reg_form'=>true,
    'login'=>true,
    'unlogin'=>true,

    'reg_user'=>true,
    'activation'=>true,
    'forgotten_password'=>true,
    'send_password'=>true
    );

    $user_sanctions= array(
    'cabinet'=>true
    );

    $admin_sanctions= array(
    'edit_users'=>true,
    'edit_std_sanct'=>true,
    'delete_std_sanct'=>true,
    'new_std_sanct'=>true,
    'new_std_sanct_set'=>true,

    'mk_std_sanct_set'=>true,
    'std_sanct_update'=>true,
    'std_sanct_set_delete'=>true,
    'std_sanct_update'=>true,
    'edit_profile'=>true,
    'profile_update'=>true,

    'edit_personal_sanct'=>true

    );

    $user_sanctions= array_merge ($guest_sanctions, $user_sanctions);
    $admin_sanctions= array_merge ($guest_sanctions, $user_sanctions, $admin_sanctions);

    sanctions_set('administrator', serialize($admin_sanctions) );
    sanctions_set('user', serialize($user_sanctions) );
    sanctions_set('guest', serialize($guest_sanctions) );



    хотя сейчас я немного усовершенствовал, но принцип примерно такой. Делай хоть скока групп пользователей с каким угодно набором прав. Мне кажется довольно гибко.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • Trej Gun

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

    Spritz 1 июня 2008 г. 3:40, спустя 3 дня 22 часа 48 минут

  • Lirck

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

    Spritz 2 июня 2008 г. 4:52, спустя 1 день 1 час 12 минут

    Можно сделать для каждой группы поле allows и в него помещать сериализованный массив с разрешениями
  • Trej Gun

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

    Spritz 2 июня 2008 г. 10:50, спустя 5 часов 58 минут 17 секунд

    Lirck, представь что будет если у тебя измениться структура сайта
    тебе придётся для каждого пользователя пересчитать его allows, а это я думаю очень трудозатратно
  • Lirck

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

    Spritz 2 июня 2008 г. 11:15, спустя 24 минуты 53 секунды

    Как понять "измениться структура сайта"?
    Например…
  • Trej Gun

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

    Spritz 5 июня 2008 г. 13:12, спустя 3 дня 1 час 57 минут

    у тебя дерево сайта

    id | name | parent
    1 | root | 0
    2 | sub1 | 1
    3 | sub2 | 1
    4 | subsub | 3

    для простоты есть только право на просмотр true или false

    в базе у тебя есть пользователь

    id = 1
    name = pupkin
    allows = serialize(array(1=>true,2=>false,3=>true,4=>false))

    так вот если у тебя появиться еще одна нода в дереве то тебе для каждого пользователя придеться достать из БД его allows превратить в массив добавить новый элемент, снова запаковать и положить снова в БД

  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 6 июня 2008 г. 8:37, спустя 19 часов 24 минуты 31 секунду

    Позвольте пояснить.

    В моей реализации три принципиально разных группы прав.

    1. Права гостя
    2. Права общие (модер, админ и т.д)
    3. Права персональные

    То что написал выше это раздел - Права общие (закроем глаза на строку - sanctions_set('guest', serialize($guest_sanctions) ) - ее уэе нет )
    98% пользователей имеют стандартные наборы разрешений.

    А вот некоторым можно выставить специальные настройки прав.
    Берешь пользователя, указываешь, что он будет обладать ПЕРСОНАЛЬНЫМ набором прав и говоришь на основе какого стандартного набора будет создан этот ПЕРСОНАЛЬНЫЙ НАБОР. Снимаешь пару галок и все. Например, Пользователь KILLICH может читать и комментить посты, но сам не может создавать темы, в отличии от 100 других рядовых пользователей.

    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru

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