2015-10-16 29 views
1

我試圖讓流星只發布用戶有權訪問的文檔。 訪問系統不在文檔數據庫中,但是如果用戶有權訪問,像hasAccess(customuserID,_id)這樣的函數調用將返回true。如何在查詢後過濾流星光標,然後發佈結果

的問題是,發佈返回遊標,所以我不能做這樣的事情:

Meteor.publish('theInvoices', function() { 
    return Invoices.find().fetch().filter(function (doc) { 
    return hasAccess(customerUserID, doc._id); // external access , filter 
    }); 
}); 

或課程該函數返回過濾文件的陣列,而不是光標所以,問題是如何過濾在發佈結果之前查詢(不使用數據庫篩選器)的結果,或者如何將文檔數組轉換爲可發佈的遊標?

感謝

回答

3

你可以嘗試這樣的事情:

Meteor.publish('theInvoices', function() { 
    var invoices = Invoices.find().fetch().filter(function (doc) { 
    return hasAccess(customerUserID, doc._id); 
    }); 
    var invoiceIds = _.pluck(invoices, '_id'); 
    return Invoices.find({_id: {$in: invoiceIds}}); 
}); 

這只是找到所有允許發票的ID,並根據公佈的名單上新的光標。請記住這個isn't reactive

另請注意,customerUserID應在某處定義。

+0

謝謝。有沒有解決方案使其成爲被動的? – woj

+0

最簡單的解決方案是添加一個可訪問每個發票文檔的用戶id數組。然後,您可以將該信息添加到選擇器。 –

+0

之前錯過了你的鏈接,這有所幫助。再次感謝。 – woj