gpt4 book ai didi

CouchDB:限制用户仅复制自己的文档

转载 作者:行者123 更新时间:2023-12-04 12:10:52 25 4
gpt4 key购买 nike

我在查找有关复制过滤器(以下示例中的“req”)中使用的请求对象参数的文档时遇到了麻烦:

function(doc, req) {
// what is inside req???
return false;
}

old CouchBase blog post有一个小代码段,显示userCtx变量是请求对象的一部分:

What is this userCtx? When you make an authenticated request against CouchDB, either using HTTP basic auth, secure cookie auth or OAuth, CouchDB will verify the user’s credentials. If they match a CouchDB user, it populates the req.userCtx object with information about the user.



此userCtx对象对于将文档复制限制到文档所有者非常有用。看看这个例子:

function(doc, req) {
// require a valid request user that owns the current doc
if (!req.userCtx.name) {
throw("Unauthorized!");
}
if(req.userCtx.name == doc.owner) {
return true;
}
return false;
}

但是现在的问题是CouchDB要求复制的发起者明确选择filter方法(在这种情况下,发起者是我的Web应用程序的移动用户):

curl -X POST http://127.0.0.1:5984/_replicate \
-d '{"source":"database", \
"target":"http://example.com:5984/database", \
"filter":"example/filtername"
}'

问题

有没有一种方法可以在默认情况下强制执行特定的筛选器,以使用户只能复制自己的数据?我在想最好的方法是使用像Nginx这样的CouchDB的前端,并将所有复制请求限制为包含该过滤器的请求。有什么想法吗?希望有一种方法可以在CouchDB前面没有其他层的情况下执行此操作。

最佳答案

用户具有读取数据的能力,因此数据复制是正确的。因为如果您的用户在单个数据库中共享数据,那么他们所有人都有权将他们全部复制到他们的本地沙发上。因此,除非将单个共享数据库拆分为多个个人数据库,否则您将无法应用任何文档读取限制-这是在这种情况下的常见用例。

没有任何方法可以强制应用更改,提要过滤器或其他类似 View 的参数。但是,您可以使用rewrites将请求包装到具有预定义查询参数甚至动态参数的某些资源。这不是您期望的一点解决方案,但还是比nginx和他的逻辑好一些:可能,您将允许用户使用自定义查询参数指定自定义过滤器,并仅在未指定内容的情况下强制拥有您自己的权限, 正确的?

P.S. req对象内部对于当前请求非常有用。部分描述在wiki上,但是有点过时了。但是,可以使用简单的show函数轻松查看它:

function(doc, req){
return {json: req}
}

关于CouchDB:限制用户仅复制自己的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12773554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com