Да, CouchDB может предотвратить несанкционированное чтение. К сожалению, это немного менее просто.
Представьте себе секретное аукционное приложение. Вы предлагаете $ 20, а я - $ 10; каждая ставка в бумажном документе. Couch позволяет нам читать наши собственные документы заявки, но не другие. Тем не менее, , есть представление с уменьшением карты, показывающее среднее значение. Я загружаю представление и вижу, что среднее значение составляет 15 долларов, поэтому я пришел к выводу, что ваша ставка составляет 20 долларов, и я нарушил политику безопасности. Просмотр результатов может привести к утечке части или всей информации документа. Невозможно обеспечить безопасность на уровне документов. Вот почему доступ для чтения находится на уровне базы данных.
Я знаю, это отстой. Но это единственный правильный, масштабируемый ответ.
Это одна из причин, по которой философия Couch заключается в создании множества баз данных - даже одной (или более!) На пользователя. Разрешение на чтение для базы данных задается в значении readers
объекта database _security
. (Обратите внимание, что поле reader было переименовано в члены в транке CouchDB, поскольку оно также указывает, кто может писать в БД.)
Техника работает так:
- Создать базу данных для каждого пользователя. Он будет содержать все документы, которые пользователь может прочитать. Добавьте пользователя (или роль пользователя) к объекту
_security
.
- В базе данных master создайте функцию фильтра, которая реализует политику чтения. (Он может поделиться кодом с
validate_doc_update
.)
- Реплицировать из основной базы данных в базу данных пользователя с помощью
?filter=my_filter_function
.
- Разрешить пользователю загружать (или копировать из) свою базу данных.
Конечно, это все для чистого приложения Couch, где пользователи получают прямой доступ к Couch. Если у вас есть средний уровень (контроллер MVC или просто обратный HTTP-прокси), вы можете применить политику там, между пользователем и диваном. Но будьте осторожны . Например, функция _show
или правило _rewrite
могут позволить пользователю загрузить представление или документ, несмотря на вашу политику.
Удачи!