我正在为一个小项目使用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请求。
答案 0 :(得分:1)
PUT将覆盖文档,正如您所提到的,您必须先删除现有文档。
安全文档也没有用于版本控制的_rev字段,当多个请求同时发生时,这将导致竞争条件。稍后到达的较慢请求可能会覆盖另一个请求的更改。 Jan Lehnardt写了一篇不错的article regarding conflicts。
你看过users-db of CouchDB了吗?它构建在CouchDB中,用于对应用程序用户进行身份验证。您可以使用users-db为您的应用程序创建用户,而无需更改管理员和成员的配置(这对于留言簿的客户端来说很危险)。