Архитектура Redis ACL

74
7

Я хотел бы использовать redis, чтобы проверить, есть ли у пользователей разрешения для определенных мест на веб-сайте.

Веб-сайт позволяет пользователям создавать группы с ограниченными возможностями. Есть, по существу, два типа пользователей (потенциально больше) - админы и читатели. Один пользователь может участвовать в разных группах (10-15 групп)

Первая идея - создать хэши redis для каждого пользователя и включить группы, для которых они являются администраторами, и группы, которые они являются читателями. Затем я могу их контролировать, удалив записи при выходе из системы и установив разрешения при входе в систему и изменив их. Также может истечь хэш.

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

Итак, мои два вопроса -

Какой подход лучше с точки зрения архитектуры?

Должен ли я использовать хэши (так как в итоге я получаю что-то вроде group:1 admins [13,52,12,43] где массив содержит идентификаторы пользователей или должен использовать что-то еще, где я могу быстро вытащить user id без необходимости синтаксического анализа массива, а затем каждый раз перебирать его?

спросил(а) 2017-07-20T15:50:00+03:00 3 года, 7 месяцев назад
1
Решение
74

Я хотел бы предложить несколько иной подход, который ИМО лучше подходит для использования.

Я предполагаю, что каждый из ваших пользователей имеет уникальный идентификатор. Допустим, что вы используете простые старые номера (или у вас есть таблица поиска, которая сопоставляет идентификатор пользователя с простым старым номером). С этого момента пользователи будут известны как 0 (первый пользователь), 1 (2-й пользователь) и т.д....

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

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

Вы слышали о BITMAP? У вас может быть растровое изображение, в котором индексы битов представляют идентификаторы пользователя, 0 означает, что пользователь не находится в группе, а 1 означает принадлежность. LMK, если вам нужна дополнительная информация или отметьте это как ответ, если это имеет смысл.

ответил(а) 2017-07-20T16:08:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема