Я бы хотел, чтобы люди могли обмениваться документами конфиденциально, используя ссылку со случайным идентификатором, как я получаю после публикации частной ссылки на пастабин. Я хочу знать как для CouchDB, так и для Cloudant в целом.Могу ли я запретить пользователям, не прошедшим проверку подлинности, доступ к _all_docs?
ответ
С Apache CouchDB, Разрешение на чтение для каждой базы данных, а не для каждого документа. Если пользователь может извлечь документ из базы данных, пользователь может также получить _all_docs?include_docs=true
.
Я написал подробности в этом вопросе о CouchDB read authorization.
Есть несколько подходов:
Layer-7 брандмауэр или обратный прокси-сервер HTTP. Это трудно сделать правильно; ИМО нецелесообразно для большинства. Вы должны быть очень, знаком с API CouchDB, чтобы убедиться, что все возможные запросы заблокированы (например,
_rewrite
, обходной фильтр).Одна база данных для каждого пользователя. Это собственное решение CouchDB. Создание баз данных очень дешево. Затем скопируйте документы, которые пользователь может увидеть в своей базе данных. Пользователю нужен пароль в Couch или OAuth.
У меня был успех недавно с базами данных для каждого пользователя, но также уникальный ключ в URL-адресе, который предоставляет им немедленный доступ. Это похоже на то, что вы хотите, но под капотом я просто создаю случайные учетные записи со случайными паролями. Ссылка идет на общедоступную страницу, такую как
www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret
. Затем Javscript в браузере будет читатьwindow.location
и вставить этот пароль в запрос AJAX (в заголовке авторизации). Couch дает разрешение, и пользователь счастлив. К сожалению, для этого потребовалось немного проб и ошибок; однако это, в основном, простое веб-программирование.
Джейсон: У вас есть блог? Я бы с удовольствием прочитал его! – Locohost
О, ты ирискач Джейсон Смит! Прошу прощения за то, что не знаю, что в моем последнем комментарии: - / – Locohost