我知道CouchDB不允許非管理員用戶編輯/刪除設計文檔,但是如何防止他們編輯/刪除所有文檔?如何防止匿名用戶在couchDB中刪除/編輯我的文檔?
我所能找到的唯一信息是用戶權限的用戶可以使用驗證功能來設置。我對如何編寫一個驗證函數來做到這一點/驗證函數的存在有點困惑。他們全部在_users數據庫中嗎?
感謝
我知道CouchDB不允許非管理員用戶編輯/刪除設計文檔,但是如何防止他們編輯/刪除所有文檔?如何防止匿名用戶在couchDB中刪除/編輯我的文檔?
我所能找到的唯一信息是用戶權限的用戶可以使用驗證功能來設置。我對如何編寫一個驗證函數來做到這一點/驗證函數的存在有點困惑。他們全部在_users數據庫中嗎?
感謝
這是一個簡單:只需創建設計文件與數據庫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"}
另一種方式來限制訪問你的數據庫是配置[couch_httpd_auth]
與require_valid_user:true
然後每個請求必須發送憑據登錄到您的couchdb。
對於我的用例,這比接受的答案簡單得多,也更有效。我的目標是阻止所有**匿名訪問,而不是針對特定文檔的具體操作。這個答案就是這樣。 – aroth 2017-12-15 04:20:50
謝謝!非常有用的答案! – 2013-04-26 17:13:24