Я использую CouchDB для хранения данных, поступающих из различных источников, и coachdb-lucene для выполнения специальных запросов. Это важно для меня, потому что я отображаю данные в ленте и хочу, чтобы эту ленту можно было фильтровать. CL идеально подходит для этого.
Однако я также хочу ввести разрешения для приложения ленты — пользователь должен иметь возможность видеть элемент ленты только в том случае, если у него есть разрешение на его просмотр.
Теперь я хотел бы иметь возможность выполнять специальные запросы и возвращать только те элементы канала, которые у текущего пользователя, прошедшего проверку подлинности, есть разрешение на чтение.
Единственное решение, которое я смог придумать (пока), состояло в том, чтобы добавить поле «разрешения» к каждому элементу фида, где я храню все разрешения для других пользователей (очевидно, пропуская пользователей, у которых вообще нет разрешений для этого элемента)
permissions: [{user_id: '123', read: true, write: true}, ...]
а затем проиндексировать этот массив в CL.
Хотя это, вероятно, сработает, я чувствую себя немного неловко, когда вынужден вкладывать метаданные разрешений в элемент канала... это может быть даже лучшим решением, чем хранить его отдельно, но мне просто не нравится, что я не кажусь чтобы здесь был выбор.
Единственным другим решением (ну, кроме сброса CouchDB) будет запуск специального запроса, не заботясь о разрешениях, а затем запуск второго запроса на сервере, который выбирает все «мои элементы» и выполняет установленное пересечение. Но эти наборы могут быть огромными (и если я их разделю, это потребует, возможно, много запросов к БД => медленных).
Подходит ли мое решение или есть что-то лучше? Или CouchDB просто не подходит для таких запросов?
Ваше здоровье!