Могу ли я ограничить доступ неавторизованных пользователей к _all_docs? - PullRequest
10 голосов
/ 10 февраля 2011

Мне бы хотелось, чтобы люди могли обмениваться документами в частном порядке, используя ссылку со случайным идентификатором, как я получаю после публикации частной ссылки на пастбине. Я хочу знать как для CouchDB, так и для Cloudant в целом.

1 Ответ

15 голосов
/ 15 февраля 2011

С Apache CouchDB разрешение на чтение для каждой базы данных , а не для документа.Если пользователь может получить документ из базы данных, он также может получить _all_docs?include_docs=true.

Я написал подробности в этом вопросе о CouchDB авторизации чтения .

ТамЕсть несколько подходов:

  1. Брандмауэр уровня 7 или обратный HTTP-прокси.Это трудно сделать правильно;ИМО не выполнимо для большинства.Вы должны быть очень знакомыми с API CouchDB, чтобы быть уверенным, что все возможные запросы заблокированы (например, _rewrite обходит ваш фильтр).

  2. Одна база данных на пользователя.Это родное решение CouchDB.Создание баз данных очень дешево.Затем скопируйте документы, которые пользователь может просматривать, в свою базу данных.Пользователю нужен пароль на Couch или учетная запись OAuth.

  3. Недавно я успешно пользовался базами данных для каждого пользователя, но также уникальный ключ в URLчто дает им немедленный доступ.Похоже, что вы хотите, однако под капотом я просто создаю одноразовые учетные записи со случайными паролями.Ссылка ведет на общедоступную страницу, например www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret.Затем Javscript в браузере прочитает window.location и вставит этот пароль в запрос AJAX (в заголовке авторизации).Диван дает разрешение, и пользователь счастлив.К сожалению, это потребовало немного проб и ошибок;однако это в основном простое веб-программирование.

...