2012-05-04 65 views

回答

2

正如馬特提到的,解決方法已不再需要。然而,作爲標準,它似乎需要刪除autopublish軟件包以確保系統安全。 Meteor文檔涵蓋確保集合的安全性:http://docs.meteor.com/#meteor_collection

+0

大有前途!看着它。謝謝! – thomasloh

+1

在Meteor 0.5.0及更新版本中,此解決方法不是必需的。 – debergalis

7

使用allowdeny來定義每個客戶端允許進行哪些數據庫更改。

從文檔:

當客戶端調用插入,更新或刪除集合,集合的允許和拒絕回調被稱爲服務器上,以確定是否寫應該被允許。如果至少有一個允許回調允許寫入,並且沒有拒絕回調否認寫入,則允許寫入繼續。

這些檢查僅在客戶端試圖直接寫入數據庫時​​運行,例如通過調用事件處理程序中的更新。服務器代碼是可信的,不受限制和拒絕。這包括使用Meteor.call調用的方法 - 它們需要執行自己的訪問檢查,而不是依賴允許和拒絕。

您可以隨意調用允許次數,每次調用都可以包含插入,更新和刪除功能的任意組合。如果他們認爲操作應該被允許,函數應該返回true。否則,他們應該返回false,或者根本沒有(undefined)。在這種情況下,Meteor將繼續搜索收集中的任何其他允許規則。

+0

此外,爲了安全讀取,只需返回一個遊標,其查詢在'Meteor.publish'函數內使用'this.userId'。您還需要運行'$ meteor remove autopublish insecure'來關閉將所有數據發佈到客戶端的初學者選項,並允許來自客戶端的大部分更改。 –

+0

今天我學到了,除非你也使用'allow',否則你不能使用'deny'。它被埋在文檔中,如下所示:「如果您從不在集合上設置任何允許規則,則所有寫入集合的客戶端都將被拒絕,並且只能從服務器端代碼寫入集合。」 –