2011-02-10 8 views
9

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

ответ

14

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

Я написал подробности в этом вопросе о CouchDB read authorization.

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

  1. Layer-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 (в заголовке авторизации). Couch дает разрешение, и пользователь счастлив. К сожалению, для этого потребовалось немного проб и ошибок; однако это, в основном, простое веб-программирование.

+0

Джейсон: У вас есть блог? Я бы с удовольствием прочитал его! – Locohost

+0

О, ты ирискач Джейсон Смит! Прошу прощения за то, что не знаю, что в моем последнем комментарии: - / – Locohost

 Смежные вопросы

  • Нет связанных вопросов^_^