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

Управление правами в социальной сети

  • artoodetoo

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

    Spritz 27 июня 2010 г. 6:45, спустя 16 минут 38 секунд

    master, истина где-то рядом.
    DAC позволяет очень быстро и однозначно определить есть ли у пользователя определённое право.
    Задача RBAC в том, чтобы приблизить описание правил к нормальному человеческому представлению, типа "редактор это тот же читатель, но еще и может править чужие статьи".
    Можно объединить достоинства этих систем, если транслировать высокоуровневые правила в оптимизированные низкоуровневые.
    ιιlllιlllι унц-унц
  • master

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

    Spritz 27 июня 2010 г. 7:02, спустя 17 минут 24 секунды

    роли - это то же что группы?
    не всё полезно, что в swap полезло
  • artoodetoo

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

    Spritz 27 июня 2010 г. 7:21, спустя 18 минут 43 секунды


    роли - это то же что группы?

    Группа в том смысле, как она используется в UNIX? И да и нет. Зависит от реализации.
    В этой теме рассматривается реализация, где пользователь получает роль в зависимости от контекста, это не укладывается в Group Access Control
    ιιlllιlllι унц-унц
  • master

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

    Spritz 27 июня 2010 г. 7:26, спустя 4 минуты 59 секунд

    пользователь получает роль в зависимости от контекста

    он ведь не просто так их получает, а на основе какой-то конфигурации "контекст -> роль"?
    не всё полезно, что в swap полезло
  • artoodetoo

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

    Spritz 27 июня 2010 г. 7:33, спустя 7 минут 8 секунд

    конечно
    Спустя 166 сек.
    здесь - конфигурация это отношения между владельцем контента и потребителем.
    ιιlllιlllι унц-унц
  • master

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

    Spritz 27 июня 2010 г. 8:39, спустя 1 час 5 минут 36 секунд

    я когда делал систему аутентификации рассматривал сперва самый простой случай - когда есть привилегии без групп (ролей).

    Привилегии: create_topic, read_topic, delete_topic, update_topic.

    с пользовтелем это будет так (1 - админ, 2 - анонимус):


    user_id | grant
    1 | create_topic
    1 | read_topic
    1 | delete_topic
    1 | update_topic
    2 | read_topic


    с контекстом видимо это будет так (админа не буду рисовать):


    user_id | context | grant
    2 | везде | read_topic
    2 | гостевая книга | create_topic


    с группами аналогично:

    group_id | context | grant
    2 | везде | read_topic
    2 | гостевая книга | create_topic


    при выборке смотрим - если пользователю явно назначена привилегия - берём её, если не назначено, но назначено группе - берём из группы.

    в коде это будет выглядеть так:


    $context = new Context;
    $context->scope = 'guestbook';
    $context->itemid = 123;
    if ($user->is_grant('delete_topic', $context)){
    // велкам
    } else {
    // нах
    }

    или

    if ($user->is_grant('delete_topic', 'guestbook', 123)){
    // велкам
    } else {
    // нах
    }

    не всё полезно, что в swap полезло
  • Абырвалг

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

    Spritz 27 июня 2010 г. 13:22, спустя 4 часа 42 минуты 58 секунд

    Здесь — нет. Самоцитата: "для нашей условной социалки можно описать правила попроще, но так, чтобы одним SELECT получить ответ на любой вопрос"

    все верно, спору нет. А можно ли дополнительно ввести кеширующую таблицу какую-нить, из которой можно будет за один `SELECT` …?

    Год назад примерно я пробовал сделать разграничение прав доступа, но на основе модулей, то есть без возможности указывать "разрешить только эту новость для пользователя Васи". Можно было разрешать доступ ко всем новостям или запрещать. И вот там были права без наследования, группы, персональные.

    Управление пользователями и правами
    ПРЕАМБУЛА

    Для управления правами доступа к различным функциям и хранимым данным,
    используется система прав.

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

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

    В случае наличия противоречащих прав в разных группах, в которые входит
    пользователь, приоритет имеет запрещающее групповое правило, либо персональное
    разрешающее. Отсутствие явного указания права предполагает запрещее правило.


    users
    id, name, passhash, …

    rules
    id, title

    groups
    id, title

    groups2users
    group_id, user_id

    rules2groups
    group_id, rule_id, allow (1/0)

    rules2users # персональные права, вне групп
    user_id, rule_id, allow (0/1)

    rules2users_cached # эта та самая кеш-таблица, в которой хранятся права в удобном виде для SELECT.
    user_id, rule_id, allow (0/1)
  • artoodetoo

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

    Spritz 27 июня 2010 г. 13:40, спустя 18 минут 15 секунд

    master, что-то очень похожее я тоже делал. Меня не удовлетворило понятие "группа". Эволюционно пришел к "отношению пользователя к владельцу контента" — друг|модератор|в черном списке и т.д.

    Абырвалг, конечно можно вычислить где узкое место и продумать как кешировать. Но, мне кажется, всё и так достаточно шустро будет. Все выборки должны происходить по ключу, т.е. очень быстро. БД сама "кеширует" самые горячие данные.
    ιιlllιlllι унц-унц
  • artoodetoo

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

    Spritz 27 июня 2010 г. 13:52, спустя 12 минут 39 секунд

    Ещё про "группы". Есть некоторая неоднозначность в использовании слова. В рамках этой темы группа-хозяин-контента и пользователь-хозяин-контента используются одинаково. Они задают контекст раздачи прав. А вот таблицы "членство в группе" у меня нет и незачем.
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 27 июня 2010 г. 14:09, спустя 16 минут 52 секунды

    у меня таблица с группами была для такого:

    1 управляющий товарами (доступ к каталогу товаров и только)
    2 редактор новостей
    3 менеджер заказов (доступ к заказам, но х-ки товаров менять не может)
  • mario

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

    Spritz 27 июня 2010 г. 14:12, спустя 2 минуты 38 секунд

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

    В общем вот так вот я вижу что есть роль, что есть группа.
  • artoodetoo

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

    Spritz 27 июня 2010 г. 14:48, спустя 36 минут 3 секунды

    mario, группы ты описал как они используются на форуме. Куда бы ты не зашел на форуме, ты останешся своей группе = наборе прав (твой набор — "Адекваты").
    В социалке "группа" используется совсем по другому. Это не набор прав пользователя, а способ сгруппировать контент — новости, галерею и т.п.
    Спустя 142 сек.
    Я могу быть одновременно админом группы "убей всех человеков" и забаненным в группе "эмо".
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 27 июня 2010 г. 14:51, спустя 3 минуты 15 секунд

    слушай, а я или не заметил или этот вопрос не освещен. В этой теме мы говорим о том, что бы разрешить просмотр фотки конкретному человеку. А как быть с "резрешить друзьям" и "друзьям друзей" ?
  • kostyl

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

    Spritz 27 июня 2010 г. 14:56, спустя 4 минуты 33 секунды

    Абырвалг, это групповые права
  • mario

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

    Spritz 27 июня 2010 г. 14:57, спустя 57 секунд


    mario, группы ты описал как они используются на форуме. Куда бы ты не зашел на форуме, ты останешся своей группе = наборе прав (твой набор — "Адекваты").
    В социалке "группа" используется совсем по другому. Это не набор прав пользователя, а способ сгруппировать контент — новости, галерею и т.п.
    Спустя 142 сек.
    Я могу быть одновременно админом группы "убей всех человеков" и забаненным в группе "эмо".
    я же уточнил:
    пользователей сходящимися по определенным признакам, но и возможно имеющим другие разные признаки

    поэтому поставь себе группу админа и поставь правило(можно отдельно, можно через роль) что права группы "Эмо" "забанены".
    PS теперь я увидел минусы своего подхода, но пока не вижу другого решения удобного…
    Спустя 25 сек.

    слушай, а я или не заметил или этот вопрос не освещен. В этой теме мы говорим о том, что бы разрешить просмотр фотки конкретному человеку. А как быть с "резрешить друзьям" и "друзьям друзей" ?
    а2д2 писал где то про это… может даже в нчале…

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