Некоторое время назад в списке рассылки было обсуждение , которое вполне соответствует этому вопросу. Основное правило заключалось в том, чтобы хранить данные только в документе, который может изменяться или увеличиваться. Если вероятность роста данных выше, то, скорее всего, вы захотите хранить отдельные документы.
Таким образом, в случае многопользовательской системы одним из способов реализации разрешений на основе ACL может быть создание «документов разрешений», которые будут отображать user_id в doc_id с указанием соответствующего разрешения.
{
_id: "permission_doc_1",
type: "acl",
user: "John",
docid: "John's Account Info",
read: true,
write: true
}
И ваши взгляды будут чем-то вроде
function(doc)
{
emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write});
}
А учитывая docid и ИД пользователя, проверка прав доступа будет:
http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]
Очевидно, это потребует наличия некоторого посредника между клиентом и кушеткой, чтобы убедиться, что разрешения были применены.