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

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

  • artoodetoo

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

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

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

    что касается "друзя друзей" ))), то этот вопрос действительно не освещен. повод проявить креативность.
    ιιlllιlllι унц-унц
  • mario

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

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

    "друзя друзей"

    и как быть с друзья друзей друзей … n-друзей :D
    Спустя 16 сек.
    зы шутка :)
  • artoodetoo

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

    Spritz 27 июня 2010 г. 7:15, спустя 11 минут 53 секунды

    определить является ли чел другом друга можно через доп. join
    каждый следующий круг друзе-друзей потребует еще один join с таблицей relations
    ιιlllιlllι унц-унц
  • artoodetoo

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

    Spritz 27 июня 2010 г. 23:01, спустя 15 часов 45 минут 50 секунд

    Сдается мне, будет неудобно в одном запросе проверять право непосредственно назначенной роли + право через друзей. А вот через PHP и доп. запрос можно.


    $roleId = Relations::getUserRole($userId, $contextId);
    if ($roleId == Roles::VISITOR && Roles::isFriendOfFriend($userId, $contextId)) {
     $roleId = Roles::FRIEND2;
    }

    $rightsArray = Rights::getRoleRights($roleId, $contextId);
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 27 июня 2010 г. 7:26, спустя 8 часов 25 минут 8 секунд

    в Yii есть своеобразные bizRule… Наверно нужно что-то типа такого.
  • artoodetoo

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

    Spritz 28 июня 2010 г. 0:14, спустя 16 часов 47 минут 59 секунд

    Теоретический материал: RBAC FAQ (English)

    Чем роли отличаются от групп?
    Мой корявый перевод.
    Существует поверхностное сходство между ролями RBAC и традиционными группами. Как правило, Группа представляет собой набор пользователей, а не набор разрешений и разрешения могут назначаться как напрямую пользователям, так и группам, в которые они входят. Способность давать права непосредственно пользователям можно рассматривать как "лазейку", ее трудно контролировать. RBAC требует, чтобы весь доступ происходил только через роли. Еще один аспект отличает его от традиционных механизмов: сессия, в рамках которой активируется подмножество ролей, назначенных пользователю. Минимальный набор (Core RBAC) включает в себя связи "многие-ко-многим" между пользователями и правами доступа.


    Core RBAC можно реализовать через две таблицы: "роли, назначенные пользователям" и "права, назначенные ролям".

    Кое-что о контексте.
    Снова мой перевод.
    "Тем не менее, для того чтобы доктор X мог просматривать электронную медицинскую карту пациента Y, недостаточно роли "Доктор", но нужна роль "Наблюдающий Врач" ПО ОТНОШЕНИЮ К пациенту Y. Другими словами, контроль доступа к медицинским картам опирается на особые отношения между доктором X и пациентом Y, что должно быть описано как основанная-на-отношениях роль (relation-based role)."


    В этой теме я использую отношения между пользователем и хозяином контента (другой пользователь или группа) - таблица relations
    Сами права роли —таблица rights — тоже содержат ссылку на контекст. Т.е. некая роль получает право не просто "смотреть картинку", а "смотреть картинку пользователя R2D2".

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

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

    Spritz 2 августа 2010 г. 0:07, спустя 34 дня 23 часа 53 минуты

    up

    Раз уж мне подвернулся бесплатный VPS от МакХоста, стартую проект "социалка-песочница". Конечно управление правами там будет :)
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 2 августа 2010 г. 3:01, спустя 2 часа 53 минуты 38 секунд

    ну че, круто. Уже недели 3 прошло, а я так и не начал.

    зы: почему ты так уперто отказываешься от PEAR/ZF class naming style?
  • phpdude

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

    Spritz 2 августа 2010 г. 3:06, спустя 5 минут 18 секунд

    Абырвалг, он профессиональный велосипедист, а ты трехколесник, поэтмоу колеся у тебя из зф а велосипед из пира :D
    Спустя 27 сек.
    а у него все самодельное, даже теории свои разработаны по поводу создания велосипедов :D
    Сапожник без сапог
  • Абырвалг

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

    Spritz 2 августа 2010 г. 3:14, спустя 8 минут 3 секунды

    ну у меня умеренная велосипедность, а у него черезмерная
  • artoodetoo

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

    Spritz 2 августа 2010 г. 3:25, спустя 10 минут 31 секунду

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

    http://qb7.ru/docs/naming.standard.ru.html
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 2 августа 2010 г. 3:34, спустя 9 минут 16 секунд

    у Фабьена меньше текста получилось)
    http://docs.symfony-reloaded.org/contributing/code/standards.html
  • adw0rd

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

    Spritz 2 августа 2010 г. 3:45, спустя 11 минут 5 секунд

    Фабьен еще не пугает бинарник?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • artoodetoo

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

    Spritz 2 августа 2010 г. 3:49, спустя 3 минуты 49 секунд

    Абырвалг, ну и в рот ему ноги :)
    ιιlllιlllι унц-унц
  • rider-sx

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

    Spritz 2 августа 2010 г. 3:51, спустя 2 минуты 7 секунд

    На счет разграничения прав можно делать так:
    Есть таблица с правами:

    right_id | desc
    1 | read
    2 | write
    3 | update
    4 | delete

    И есть таблица с юзерами:

    user_id | access
    1 | 1
    2 | 2,4
    3 | 1,2,4

    То-есть есть примитивные права по типу чтение запись удаление и т.д., юзеру назначается либо один примитив, либо смесь примитивов.
    Система получается легко расширяемой на предмет доступных прав.
    Можно еще прикрутить систему обязанностей возлагающихся на каждое примитивное право, чем больше прав, тем больше обязанностей :)

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