我們可以使用安全的方法讓使用者端不直接運算元據庫,但是還是可以直接讀取資料庫內容,如果我們還需要保護私有的資料儲存,在客戶端直接使用collection.find()
,這樣的操作方式在實際的專案中並不會使用,這樣的資料無法保證私有性和安全性。如果一些資料我們並不想自動的在客戶端更新,就需要自定義publish
和subscribe
,如何在meteor中自定義發布與訂閱模式呢?
在 meteor:方法控制中我們移除了insecure
,在這裡我們需要移除autopublish
。顧名思義,autopublish的意思就是meteor自動的實現資料的publish/subscribe。
meteor remove autopublish移除之後在我們新增資料以後,頁面就不再直接顯示資料了。想要顯示資料,我們需要使用
meteor.publish
和meteor.subscribe
方法,讓服務端通知客戶端的資料更新。
if (meteor.isserver) );
}
if (meteor.isclient) , })
});});
在server端使用meteor.publish
函式註冊乙個"languages"的發布者,需要在客戶端對"languages"進行訂閱,使用meteor.subscribe
訂閱了"languages",現在已經新增的資料就會重新出現在頁面上。
利用發布/訂閱模式,我們也可以實現對於私有資料的訪問。
在頁面上新增乙個private的按鈕:
}
delete
update
}private}}
新增設定為privte的方法:
meteor.methods();
},updatelanguage: function (_id)
})},
removelanguage: function (_id) ,
setprivate: function (_id) })}
});
客戶端呼叫設定privte的方法:
template.other_event.events(,
'click .update': function () ,
'click .private': function ()
});
在meteor.publish的可以使用filter過濾掉不是改使用者的,非私有的資料:
meteor.publish("languages", function ()
//auth user
//,]
});});
測試這樣的資料可以使用不通的使用者在不通的瀏覽器上面做測試,每個使用者都是只能看到自己的資料。
只允許使用者對於自己的資料進行刪除操作
removelanguage: function (_id)
languages.remove(_id);
}
這樣我們就能保證私有資料的安全,客戶端不能直接運算元據(remove insecure),客戶端也不直接訪問資料庫(remove autopublish),就有效的保護私有資料的安全。
專案位址 :
Meteor發布 訂閱
詳解 發布和訂閱是meteor的重要部分。meteor資料庫在服務端有mongo 本地有minimongo,這是moteor重寫本地mongo。推送資料庫子集到客戶端。這樣呢伺服器就不需要再傳送html到本地了,而是傳送直實的原始資料。讓客戶端決定如何處理資料。不用再等待伺服器傳回資料,而是立即訪問...
發布與訂閱
redis的發布與訂閱功能由publish subscribe psubscribe命令組成。1 subscribe命令 客戶端可以訂閱乙個或多個頻道,從而成為這些頻道的訂閱者 subscriber 每當有其他客戶端向被訂閱的頻道傳送訊息 message 時,頻道的所有訂閱者都會收到這條訊息。127...
mysql訊息訂閱與發布 發布 訂閱配置
public ibus bus public void handle mymessage message bus.publish e e.someproperty xyz 公共汽車 屬性將自動由基礎設施。這就是所謂的 依賴注入 所有開發完成了nservicebus利用這些模式。技術作為nservic...