[英]Accessing collections from Meteor server-side method
服務器端方法也受發布管轄嗎? 我認為服務器端方法可以修改所需的任何內容。
就我而言,在template
的幫助器中,我具有Meteor.call('serverMethod', id)
,然后在collections/methods.js
定義serverMethod
。
通過發布, template
只能訪問一條記錄( id
1),但這是serverMethod
只能看到的一條記錄。
但是,當我將所有內容發布到template
, serverMethod
看到所有內容。
那不是很奇怪嗎? 我認為服務器方法的目的是受信任的,這樣我可以在不發布整個數據庫的情況下修改所需的任何內容? 有什么我想念的嗎?
我的allow
權限設置得很好,與應用程序的其他部分一樣可以正常工作。
您最初的假設是正確的-服務器上的方法是“可信代碼”,因此可以完全訪問您的集合(發布和拒絕規則不適用)。
我認為混淆之處在於serverMethod
是在共享目錄中定義的,因此將在客戶端和服務器上運行(除非它被Meteor.isServer
包裝)。 因此,如果調用是在客戶端上發起的,它將同時運行兩個版本。 根據方法的實際作用和調用方式,您可能只會看到客戶端調用的結果。 方法的客戶端版本是由什么已發布到客戶端的限制。
我懷疑在幫手內部您正在執行以下操作:
var result = Meteor.call('serverMethod', id);
這說:“調用serverMethod
的客戶端模擬並立即返回結果”。 為了實際從服務器獲取值,您需要使用回調。 例如:
Meteor.call('serverMethod', id, function (error, result) { console.log(result); } );
如果以上信息是對問題的准確描述,那么您現在還有另一個問題要處理:您不能在模板助手中使用異步回調的值。 有關更多信息,請參見此問題 。
服務器端方法可以訪問所有內容,並且不受“允許”或“拒絕”規則或發布方法的約束
您必須手動檢查用戶是否有權執行每種方法。
也許是因為serverMethod
是從客戶端傳遞id
的,所以從技術上講,它只能最終看到客戶端可以看到的內容? (因為ID是傳遞回服務器的內容)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.