Spear
почемучка
Расширенные настройки доступа к стате. Как правильно делать выборку?
Здравствуйте,
есть такая задача - при публикации материала у пользователя должен быть выбор настроек - кому показывать статью.
Примерно так:
- всем, включая незарегистрированных
- только зарегистрированным
- только мне
- только друзьям
- только определенным друзьям
- только определенным группам друзей
Собственно, если бы небыло последних 3 пунктов то сделать это несложно: в таблице просто поле privacy_level. Потом, например:
select * from news where privacy_leve = '2' // если пользователь зарегистрировался
но как правильно делать выборку, если опубликованный материал могут просматривать только определенные пользователи? НапримеР, пользователи с айдишником 50 и 80?
Пока что вариант есть только очень "тяжелый" в плане производительности - выбираю все статьи из бд, пишу в массив. а потом прохожу по массиву и делаю unset() тех, на которые нет прав просмотра.
Но тогда, допустим, имея 2000 статей, придется выбирать все 2000, потом оттуда убирать те. которые мы видеть не можем, а уже потом из оставшихся оставлять только 10 (10 - кол-во статей, отображаемых на странице).
Я вот почему-то практически уверен что есть более пряморукие решения и подходы к решения такой задачи.
Использовать громоздкие опенсорцные (если такие есть) системы для контроля доступа не представляет возможности, т.к. они, собсно, громоздкие. Мне нужно понять как правильно это делается и сделать самому, по максимуму минимизировав ненужные "фичи", которые могут предлагать опенсорцные проекты (если таковые имеются).
Подскажите пожалуйста!
Здравствуйте,
есть такая задача - при публикации материала у пользователя должен быть выбор настроек - кому показывать статью.
Примерно так:
- всем, включая незарегистрированных
- только зарегистрированным
- только мне
- только друзьям
- только определенным друзьям
- только определенным группам друзей
Собственно, если бы небыло последних 3 пунктов то сделать это несложно: в таблице просто поле privacy_level. Потом, например:
select * from news where privacy_leve = '2' // если пользователь зарегистрировался
но как правильно делать выборку, если опубликованный материал могут просматривать только определенные пользователи? НапримеР, пользователи с айдишником 50 и 80?
Пока что вариант есть только очень "тяжелый" в плане производительности - выбираю все статьи из бд, пишу в массив. а потом прохожу по массиву и делаю unset() тех, на которые нет прав просмотра.
Но тогда, допустим, имея 2000 статей, придется выбирать все 2000, потом оттуда убирать те. которые мы видеть не можем, а уже потом из оставшихся оставлять только 10 (10 - кол-во статей, отображаемых на странице).
Я вот почему-то практически уверен что есть более пряморукие решения и подходы к решения такой задачи.
Использовать громоздкие опенсорцные (если такие есть) системы для контроля доступа не представляет возможности, т.к. они, собсно, громоздкие. Мне нужно понять как правильно это делается и сделать самому, по максимуму минимизировав ненужные "фичи", которые могут предлагать опенсорцные проекты (если таковые имеются).
Подскажите пожалуйста!