Форум → Программирование → PHP для идиотов → Управление правами в социальной сети
Управление правами в социальной сети
Страницы: ← Предыдущая страница • Следующая страница →
-
27 июня 2010 г. 6:45, спустя 16 минут 38 секунд
master, истина где-то рядом.
DAC позволяет очень быстро и однозначно определить есть ли у пользователя определённое право.
Задача RBAC в том, чтобы приблизить описание правил к нормальному человеческому представлению, типа "редактор это тот же читатель, но еще и может править чужие статьи".
Можно объединить достоинства этих систем, если транслировать высокоуровневые правила в оптимизированные низкоуровневые.ιιlllιlllι унц-унц -
27 июня 2010 г. 7:02, спустя 17 минут 24 секунды
роли - это то же что группы?не всё полезно, что в swap полезло -
27 июня 2010 г. 7:21, спустя 18 минут 43 секунды
роли - это то же что группы?
Группа в том смысле, как она используется в UNIX? И да и нет. Зависит от реализации.
В этой теме рассматривается реализация, где пользователь получает роль в зависимости от контекста, это не укладывается в Group Access Controlιιlllιlllι унц-унц -
27 июня 2010 г. 7:26, спустя 4 минуты 59 секунд
пользователь получает роль в зависимости от контекста
он ведь не просто так их получает, а на основе какой-то конфигурации "контекст -> роль"?не всё полезно, что в swap полезло -
27 июня 2010 г. 7:33, спустя 7 минут 8 секунд
конечноСпустя 166 сек.здесь - конфигурация это отношения между владельцем контента и потребителем.ιιlllιlllι унц-унц -
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 полезло -
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) -
27 июня 2010 г. 13:40, спустя 18 минут 15 секунд
master, что-то очень похожее я тоже делал. Меня не удовлетворило понятие "группа". Эволюционно пришел к "отношению пользователя к владельцу контента" — друг|модератор|в черном списке и т.д.
Абырвалг, конечно можно вычислить где узкое место и продумать как кешировать. Но, мне кажется, всё и так достаточно шустро будет. Все выборки должны происходить по ключу, т.е. очень быстро. БД сама "кеширует" самые горячие данные.ιιlllιlllι унц-унц -
27 июня 2010 г. 13:52, спустя 12 минут 39 секунд
Ещё про "группы". Есть некоторая неоднозначность в использовании слова. В рамках этой темы группа-хозяин-контента и пользователь-хозяин-контента используются одинаково. Они задают контекст раздачи прав. А вот таблицы "членство в группе" у меня нет и незачем.ιιlllιlllι унц-унц -
27 июня 2010 г. 14:09, спустя 16 минут 52 секунды
у меня таблица с группами была для такого:
1 управляющий товарами (доступ к каталогу товаров и только)
2 редактор новостей
3 менеджер заказов (доступ к заказам, но х-ки товаров менять не может) -
27 июня 2010 г. 14:12, спустя 2 минуты 38 секунд
Действие - правило разрешающее или запрещающее что либо…
Роль - набор правил и свойств предопределяющие действия, придумана для облегчения работы с возможными действиями для юзера.
Группа - создана для упрощения раздачи большому количеству пользователей сходящимися по определенным признакам, но и возможно имеющим другие разные признаки….
В общем вот так вот я вижу что есть роль, что есть группа. -
27 июня 2010 г. 14:48, спустя 36 минут 3 секунды
mario, группы ты описал как они используются на форуме. Куда бы ты не зашел на форуме, ты останешся своей группе = наборе прав (твой набор — "Адекваты").
В социалке "группа" используется совсем по другому. Это не набор прав пользователя, а способ сгруппировать контент — новости, галерею и т.п.
Спустя 142 сек.Я могу быть одновременно админом группы "убей всех человеков" и забаненным в группе "эмо".ιιlllιlllι унц-унц -
27 июня 2010 г. 14:51, спустя 3 минуты 15 секунд
слушай, а я или не заметил или этот вопрос не освещен. В этой теме мы говорим о том, что бы разрешить просмотр фотки конкретному человеку. А как быть с "резрешить друзьям" и "друзьям друзей" ? -
-
27 июня 2010 г. 14:57, спустя 57 секунд
я же уточнил:
mario, группы ты описал как они используются на форуме. Куда бы ты не зашел на форуме, ты останешся своей группе = наборе прав (твой набор — "Адекваты").
В социалке "группа" используется совсем по другому. Это не набор прав пользователя, а способ сгруппировать контент — новости, галерею и т.п.
Спустя 142 сек.Я могу быть одновременно админом группы "убей всех человеков" и забаненным в группе "эмо".пользователей сходящимися по определенным признакам, но и возможно имеющим другие разные признаки
поэтому поставь себе группу админа и поставь правило(можно отдельно, можно через роль) что права группы "Эмо" "забанены".
PS теперь я увидел минусы своего подхода, но пока не вижу другого решения удобного…Спустя 25 сек.
а2д2 писал где то про это… может даже в нчале…
слушай, а я или не заметил или этот вопрос не освещен. В этой теме мы говорим о том, что бы разрешить просмотр фотки конкретному человеку. А как быть с "резрешить друзьям" и "друзьям друзей" ?
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!