レプリケーション フィルターで使用されるリクエスト オブジェクト引数に関するドキュメントを見つけるのに問題があります (以下のサンプルでは「req」)。
function(doc, req) {
// what is inside req???
return false;
}
この古い CouchBase ブログ投稿には、リクエスト オブジェクトの一部である userCtx 変数を示す小さなコード スニペットがあります。
このuserCtxは何ですか? HTTP 基本認証、セキュア Cookie 認証、または OAuth を使用して CouchDB に対して認証済みのリクエストを行うと、CouchDB はユーザーの資格情報を検証します。それらが CouchDB ユーザーと一致する場合、ユーザーに関する情報を req.userCtx オブジェクトに取り込みます。
この 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 ではレプリケーションのイニシエーターがフィルター メソッドを明示的に選択する必要があることです (この場合、イニシエーターは私の 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 の前に別のレイヤーを配置せずにこれを行う方法が大好きです。