2013-04-25 36 views
5

我知道CouchDB不允許非管理員用戶編輯/刪除設計文檔,但是如何防止他們編輯/刪除所有文檔?如何防止匿名用戶在couchDB中刪除/編輯我的文檔?

我所能找到的唯一信息是用戶權限的用戶可以使用驗證功能來設置。我對如何編寫一個驗證函數來做到這一點/驗證函數的存在有點困惑。他們全部在_users數據庫中嗎?

感謝

回答

4

這是一個簡單:只需創建設計文件與數據庫validate_doc_update功能,你想控制文件,做這樣的事情:

function(newDoc, oldDoc, userCtx, secObj){ 
    if('_admin' in userCtx.roles) return; // skip anonymous in Admin Party case; 
    if(!userCtx.name && newDoc._deleted){ 
     throw({'forbidden': 'auth first before delete something'}); 
    } 
} 

的想法很簡單:如果userCtx沒有指定名稱,這意味着用戶是匿名的,如果我們的新的文檔版本有專業_deleted設定爲true - 將要刪除的文件(但更改不會保存在磁盤上還)。因此,如果條件滿足,我們檢查這些字段並拋出禁止的異常。我們也對行政黨案例作了例外,這裏有所有人都沒有名字,但具有_admin角色,所以我們需要跳過它們。而現在對任何企圖通過匿名用戶刪除常規文件,他將獲得下一個HTTP響應:

HTTP/1.1 403 Forbidden 
Server: CouchDB/1.3.0 (Erlang OTP/R15B03) 
Date: Thu, 25 Apr 2013 18:48:51 GMT 
Content-Type: application/json 
Content-Length: 68 
Cache-Control: must-revalidate 

{"error":"forbidden","reason":"auth first before delete something"} 
+0

謝謝!非常有用的答案! – 2013-04-26 17:13:24

6

另一種方式來限制訪問你的數據庫是配置[couch_httpd_auth]require_valid_user:true

然後每個請求必須發送憑據登錄到您的couchdb。

+2

對於我的用例,這比接受的答案簡單得多,也更有效。我的目標是阻止所有**匿名訪問,而不是針對特定文檔的具體操作。這個答案就是這樣。 – aroth 2017-12-15 04:20:50

相關問題