簡體   English   中英

從Meteor服務器端方法訪問集合

[英]Accessing collections from Meteor server-side method

服務器端方法也受發布管轄嗎? 我認為服務器端方法可以修改所需的任何內容。

就我而言,在template的幫助器中,我具有Meteor.call('serverMethod', id) ,然后在collections/methods.js定義serverMethod

通過發布, template只能訪問一條記錄( id 1),但這是serverMethod只能看到的一條記錄。

但是,當我將所有內容發布到templateserverMethod看到所有內容。

那不是很奇怪嗎? 我認為服務器方法的目的是受信任的,這樣我可以在不發布整個數據庫的情況下修改所需的任何內容? 有什么我想念的嗎?

我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM