具有angularJS的CouchDB _security PUT

时间:2014-12-10 11:10:48

标签: angularjs http curl couchdb

我正在为一个小项目使用couchDB和angular。我正在尝试使我的数据库更安全,并且想知道如何在不替换现有值的情况下将新成员放置或者PUT / POST到数据库的_security文档。我理解使用curl这样做的过程,但是不理解如何使用angular而不覆盖现有值。

卷曲是:

curl -u admin -X PUT $HOST/database/_security -d '{"admins": {"names":[], "roles":[]}, "members": {"names": ["example"], "roles": []}}'

在角度我有这个代码:

$http({
    url: 'http://ip:5984/guestbook/_security',
    method: 'PUT',
    withCredentials: true,
    headers: {
        'Authorization': auth_hash('adminAccount', 'adminPassword')
    },
    data: {
        admins: {
            names: [],
            roles: []
        },
        members: {
            names: [self.user.name],
            roles: []
        }
     }
})

就像我说的问题是它已经超过已经存在的东西,会使用不同的请求意味着它不会吗?我能想到的唯一方法是将现有的_security文档拉到客户端,追加并重新放置。当然这会产生安全问题以及大量的http请求。

1 个答案:

答案 0 :(得分:1)

PUT将覆盖文档,正如您所提到的,您必须先删除现有文档。

安全文档也没有用于版本控制的_rev字段,当多个请求同时发生时,这将导致竞争条件。稍后到达的较慢请求可能会覆盖另一个请求的更改。 Jan Lehnardt写了一篇不错的article regarding conflicts

你看过users-db of CouchDB了吗?它构建在CouchDB中,用于对应用程序用户进行身份验证。您可以使用users-db为您的应用程序创建用户,而无需更改管理员和成员的配置(这对于留言簿的客户端来说很危险)。