2015-07-21 2 views
0

Я использую PouchDB в мобильном приложении для синхронизации экземпляра локальной базы данных с удаленным. Мне нужно добавить документ _security в базу данных. Я попытался добавить _security в локальную базу данных PouchDB, но он не позволяет добавлять/редактировать документы, начинающиеся с _ (проектные документы). Поскольку в локальной базе данных не нужен документ _security, я думал, что могу просто добавить его в удаленную базу данных, отправив запрос HTTP PUT.

С Curl я могу добавить _security документ с помощью этой команды:

curl -X PUT http://dbadmin:'password'@IP.ADDR:5984/databasename/_security -d '{"admins":{"names":["myuser"], "roles":[]}, "readers":{"names":[],"roles":["myreaders"]}}' 

И это прекрасно работает. Есть что-то неправильно, хотя мой метод Angular $ http. Я использую этот код:

$http({ 
     method: 'PUT', 
     url: "http://dbadmin:[email protected]:5984/databasename/_security", 
     data: JSON.stringify({_id: '_security', admins: {names: ['"' + userID + '"'], roles: []}, readers: {names: [], roles: ['"myreaders"']}}) 
    }); 

И я получаю эту ошибку: Error: Access to restricted URI denied

Что я делаю неправильно? Как я могу это исправить?

Любые другие предложения о том, как написать документ security, т. Е. Не использовать $ http, также приветствуются. Я взглянул на: https://github.com/pouchdb/pouchdb/issues/3529 и страницы, на которые он ссылается, но не смог найти решение, которое работает для меня. Я посмотрел на плагин pouchdb-security, но предпочел бы не использовать плагин для написания документа _security, а также не смог найти документацию о том, что плагин на странице проекта плагина (https://www.npmjs.com/package/pouchdb-security).

ответ

0

Возможно, это не тот ответ, который вы хотели услышать, но если вы выставляете документ клиента _security, то вы, вероятно, делаете что-то очень не так. Предоставление всем вашим пользователям полных прав администратора для вашего CouchDB - это рецепт катастрофы.

Именно поэтому PouchDB не облегчает вам установку в _security док. :)

Что касается «Доступа к ограниченной URI» ошибке самой, это, вероятно, потому, что вы не включили CORS на CouchDB: https://github.com/pouchdb/add-cors-to-couchdb

+0

Я не думаю, что я делаю что-то неправильно. Если вы посмотрите на ссылку github, которую я опубликовал, была дискуссия только об этом. Разработчики PouchDB участвуют в этом обсуждении, и никто не упоминает об этом, что что-то не так с добавлением/добавлением документа _security. Я не предоставляю пользователям полные права администратора, почему вы предполагаете, что я это делаю? Я вхожу в качестве администратора для создания базы данных для пользователя (используя pouchdb-authentication [вы пишете это?). Я также не думаю, что это проблема CORS, потому что я установил плагин CORS CouchDB и отключил синхронизацию базы данных безопасности (администратора). – user473453

+0

Извините, я перечитал вопрос Github, и да, я написал pouchdb-аутентификацию. Разговор в этом выпуске состоял в том, что сам PouchDB не позволяет вам размещать документ _security, а обсуждение с разработчиками заключалось в том, следует ли предоставлять общую обертку AJAX ('db.request'), что мы и делаем сейчас, хотя мы называем это [extras/api] (http://pouchdb.com/api.html#extras). В общем, вы можете использовать любой метод AJAX (например, '$ http') для достижения того, что вы хотите.Я по-прежнему не рекомендую его, потому что да, вам нужны права администратора для установки документа '_security'. – nlawson

0

Я могу попробовать сейчас, но я думаю, ваша проблема приходит из _ID данных, которые вы отправить ваш запрос:

_id: '_security' 

Id документа уже на URL ("http://dbadmin:[email protected]:5984/databasename/_security",), так что вы Juste должны отправить данные, такие как:

$http({ 
    method: 'PUT', 
    url: "http://dbadmin:[email protected]:5984/databasename/_security", 
    data: JSON.stringify({admins: {names: ['"' + userID + '"'], roles: []}, readers: {names: [], roles: ['"myreaders"']}}) 
    }); 
Смежные вопросы