2017-07-26 135 views
0

我正在開發一個使用PouchDB(客戶端)和CouchDB(服務器端)的移動應用程序。Couchdb應用過濾服務器端

我需要確保文檔以允許用戶只讀/寫自己的文檔。

我做了這樣的過濾器,是這樣的:

function(doc, req) { 
    return doc.owner == req.userCtx.name || doc.sharedWith == req.userCtx.name; 
} 

和它工作得很好,但只有來自客戶端的請求包括過濾器:

/somedatabase/_alldocs?filter=filter/secure 

我需要CouchDB的使用在每個請求中過濾,有或沒有客戶端指明,出於明顯的安全原因。這甚至有可能嗎?否則,哪個是解決這些安全問題的正確方法?

還有一個類似的問題here但答案不適用於我的情況,因爲我需要在用戶之間共享文檔並在所有數據庫之間複製它們不是一個有效的選項。

回答

2

所以我不知道你是否看過這個wiki,但它列出了幾個可用的選項。其中一些已經過時了。

每個用戶數據庫

可能是最流行的解決方案。如您所說,您需要與其他用戶共享文檔。這可以通過以下方式完成:

  1. 分享時將文檔複製到其他用戶。你可以有一個deamon來監聽_changes feed並更新其他用戶數據庫中的作者文件。
  2. 構建Web服務來訪問共享文件(非常類似於代理解決方案)

智能代理

建立在你的數據庫的前一個智能代理的作用,並做一些業務邏輯來獲取文件。這使您可以更好地控制數據流,但肯定會變慢。

的validate_doc_read服務器功能能吸引你,但它從來沒有CouchDB的發行版的一部分(由於上市限制)。

0

呃,可能不是。我們正在開發的應用程序需要與不同的用戶共享文檔。任何文檔都可以與不同組用戶共享