SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.04.2010 10:46:39

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Как эффективно запрограммировать права доступа на сайте?

Имеется некий набор принадлежащих пользователям сущностей (например, фотографий), на которые они могут выставлять права просмотра:
- всем
- только зарегистрированным
- только друзьям
- только себе

Показывается список, содержащий сущности от разных пользователей вперемежку.
Основная проблема в том, что список разбит на страницы, поэтому нужно знать общее количество выводимых сущностей (задача ставится так, что пользователь ни в каком виде в списке не должен видеть сущность, которая ему не будет показываться).
И вот чтобы узнать это количество, надо для КАЖДОЙ сущности определить права просмотра и решить, считать её или нет.

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

Есть ли какие-нибудь мысли на этот счет?

Неактивен

 

#2 08.04.2010 10:58:02

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Как эффективно запрограммировать права доступа на сайте?

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

Неактивен

 

#3 08.04.2010 13:36:43

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Как эффективно запрограммировать права доступа на сайте?

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

Согласен.

Свои закрытые от других записи считаются легко.

Уже хуже. Потому что нужно использовать другую колонку - user_id, а не permission_view, как когда смотришь записи, доступные всем, где достаточно только прав.

Также записи друзей считаются отдельно, проходя по списку друзей данного юзера.

Уже хуже, т.к. опять же user_id и еще JOIN нужен с таблицей, где друзья.

В общем, это получается UNION трёх SELECT'ов.
В них, понятное дело, нужно получить только id сущностей, но все равно придется строить их ПОЛНЫЙ список, чтобы понять, в каком порядке их выдавать (в зависимости от отношений пользователей порядок фотографий может меняться, т.к. те или иные фотографии в него добавляются или из него исключаются).
Т.е., вроде как, проблема все равно никуда не уходит sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson