摘要:發(fā)布與訂閱在端使用函數(shù)注冊(cè)一個(gè)的發(fā)布者,需要在客戶(hù)端對(duì)進(jìn)行訂閱,使用訂閱了現(xiàn)在已經(jīng)添加的數(shù)據(jù)就會(huì)重新出現(xiàn)在頁(yè)面上。利用發(fā)布訂閱模式,我們也可以實(shí)現(xiàn)對(duì)于私有數(shù)據(jù)的訪(fǎng)問(wèn)。
我們可以使用安全的方法讓用戶(hù)端不直接操作數(shù)據(jù)庫(kù),但是還是可以直接讀取數(shù)據(jù)庫(kù)內(nèi)容,如果我們還需要保護(hù)私有的數(shù)據(jù)存儲(chǔ),在客戶(hù)端直接使用Collection.find(),這樣的操作方式在實(shí)際的項(xiàng)目中并不會(huì)使用,這樣的數(shù)據(jù)無(wú)法保證私有性和安全性。如果一些數(shù)據(jù)我們并不想自動(dòng)的在客戶(hù)端更新,就需要自定義publish和subscribe,如何在Meteor中自定義發(fā)布與訂閱模式呢?
Remove Autopublish在 Meteor:方法控制中我們移除了 insecure,在這里我們需要移除autopublish。顧名思義,autopublish的意思就是meteor自動(dòng)的實(shí)現(xiàn)數(shù)據(jù)的publish/subscribe。
meteor remove autopublish
移除之后在我們添加數(shù)據(jù)以后,頁(yè)面就不再直接顯示數(shù)據(jù)了。想要顯示數(shù)據(jù),我們需要使用Meteor.publish和Meteor.subscribe方法,讓服務(wù)端通知客戶(hù)端的數(shù)據(jù)更新。
發(fā)布與訂閱 publishif (Meteor.isServer) { Meteor.publish("languages", function () { return Languages.find(); }); }subsribe
if (Meteor.isClient) { Meteor.subscribe("languages"); Template.meteor_collection.helpers({ languages: Languages.find({}, {sort: {createdAt: -1}}) }); });
在Server端使用Meteor.publish函數(shù)注冊(cè)一個(gè)"languages"的發(fā)布者,需要在客戶(hù)端對(duì)"languages"進(jìn)行訂閱,使用Meteor.subscribe訂閱了"languages",現(xiàn)在已經(jīng)添加的數(shù)據(jù)就會(huì)重新出現(xiàn)在頁(yè)面上。
利用發(fā)布/訂閱模式,我們也可以實(shí)現(xiàn)對(duì)于私有數(shù)據(jù)的訪(fǎng)問(wèn)。
在頁(yè)面上添加一個(gè)private的按鈕:
{{#each others}}{{/each}} {{name}} ,{{updateAt}}
{{#unless private}} {{/unless}}
添加設(shè)置為privte的方法:
Meteor.methods({ addLanguage: function (text) { Languages.insert({ name: text, createdAt: new Date() }); }, updateLanguage: function (_id) { Languages.update(_id, { $set: {updateAt: new Date()} }) }, removeLanguage: function (_id) { Languages.remove(_id); }, setPrivate: function (_id) { Languages.update(_id, { $set: {private: true} }) } });
客戶(hù)端調(diào)用設(shè)置privte的方法:
Template.other_event.events({ "click .delete": function () { Meteor.call("removeLanguage", this._id); }, "click .update": function () { Meteor.call("updateLanguage", this._id); }, "click .private": function () { Meteor.call("setPrivate",this._id); } });設(shè)置發(fā)布的數(shù)據(jù)必須是私有的
在Meteor.publish的可以使用filter過(guò)濾掉不是改用戶(hù)的,非私有的數(shù)據(jù):
Meteor.publish("languages", function () { return Languages.find({ $or: [ {private: true} //auth user //,{owner:this.userId()} ] }); });
測(cè)試這樣的數(shù)據(jù)可以使用不通的用戶(hù)在不通的瀏覽器上面做測(cè)試,每個(gè)用戶(hù)都是只能看到自己的數(shù)據(jù)。
對(duì)刪除數(shù)據(jù)的操作做檢查只允許用戶(hù)對(duì)于自己的數(shù)據(jù)進(jìn)行刪除操作
removeLanguage: function (_id) { var language=Languages.findOne(_id); if(language.private&&language.owner !=Meteor.userId){ throw new Meteor.Error("not-authorized"); } Languages.remove(_id); }
這樣我們就能保證私有數(shù)據(jù)的安全,客戶(hù)端不能直接操作數(shù)據(jù)(remove insecure),客戶(hù)端也不直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)(remove autopublish),就有效的保護(hù)私有數(shù)據(jù)的安全。
項(xiàng)目地址 :https://github.com/jjz/meteor/tree/master/meteor-publish
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18827.html
摘要:發(fā)布與訂閱在端使用函數(shù)注冊(cè)一個(gè)的發(fā)布者,需要在客戶(hù)端對(duì)進(jìn)行訂閱,使用訂閱了現(xiàn)在已經(jīng)添加的數(shù)據(jù)就會(huì)重新出現(xiàn)在頁(yè)面上。利用發(fā)布訂閱模式,我們也可以實(shí)現(xiàn)對(duì)于私有數(shù)據(jù)的訪(fǎng)問(wèn)。 我們可以使用安全的方法讓用戶(hù)端不直接操作數(shù)據(jù)庫(kù),但是還是可以直接讀取數(shù)據(jù)庫(kù)內(nèi)容,如果我們還需要保護(hù)私有的數(shù)據(jù)存儲(chǔ),在客戶(hù)端直接使用Collection.find(),這樣的操作方式在實(shí)際的項(xiàng)目中并不會(huì)使用,這樣的數(shù)據(jù)無(wú)法...
摘要:通過(guò)發(fā)布訂閱模式過(guò)濾數(shù)據(jù)現(xiàn)在我們已經(jīng)把應(yīng)用中比較敏感的代碼放到了一些方法里面,我們還需要學(xué)習(xí)安全故事的另一半內(nèi)容了。當(dāng)在客戶(hù)端被調(diào)用時(shí)傳入發(fā)布器名稱(chēng),客戶(hù)端將會(huì)從發(fā)布器訂閱所有的數(shù)據(jù)。這個(gè)按鈕應(yīng)該只是給任務(wù)的所有者來(lái)顯示。 通過(guò)發(fā)布訂閱模式過(guò)濾數(shù)據(jù) 現(xiàn)在我們已經(jīng)把應(yīng)用中比較敏感的代碼放到了一些方法里面,我們還需要學(xué)習(xí)Meteor安全故事的另一半內(nèi)容了。到現(xiàn)在為止,我們一直是假設(shè)整個(gè)整個(gè)...
摘要:下一步干什么恭喜你剛剛成功編寫(xiě)了你的應(yīng)用,別忘了再部署一遍,這樣你的朋友們就可以使用這些新特性了你的應(yīng)用在一個(gè)單個(gè)的任務(wù)清單中是支持合作的。檢查一下例子待辦事項(xiàng)。更多的可以控制分享多個(gè)列表的已完成應(yīng)用。 下一步干什么? 恭喜你剛剛成功編寫(xiě)了你的Meteor應(yīng)用,別忘了再部署一遍,這樣你的朋友們就可以使用這些新特性了! 你的應(yīng)用在一個(gè)單個(gè)的任務(wù)清單中是支持合作的。試試怎么樣添加更多的功能...
摘要:中文最小字體問(wèn)題添加屬性以取消瀏覽器的自動(dòng)調(diào)整會(huì)使原本應(yīng)該調(diào)整的地方失效原本就是專(zhuān)為了移動(dòng)端設(shè)置的屬性,桌面端不適應(yīng)已修復(fù)建議通過(guò)縮小來(lái)獲得小字體。 暫時(shí)先堆在一起,等某條目里面的內(nèi)容超過(guò)十條了,就單列出去。 更新歷史: 17.7.24 =ADD= typescript —> interface =ADD= alof awsome net 17.7.23 =ADD=...
摘要:中文最小字體問(wèn)題添加屬性以取消瀏覽器的自動(dòng)調(diào)整會(huì)使原本應(yīng)該調(diào)整的地方失效原本就是專(zhuān)為了移動(dòng)端設(shè)置的屬性,桌面端不適應(yīng)已修復(fù)建議通過(guò)縮小來(lái)獲得小字體。 暫時(shí)先堆在一起,等某條目里面的內(nèi)容超過(guò)十條了,就單列出去。 更新歷史: 17.7.24 =ADD= typescript —> interface =ADD= alof awsome net 17.7.23 =ADD=...
閱讀 3093·2021-09-22 15:20
閱讀 2610·2019-08-30 15:54
閱讀 1975·2019-08-30 14:06
閱讀 3123·2019-08-30 13:05
閱讀 2467·2019-08-29 18:36
閱讀 580·2019-08-29 15:10
閱讀 533·2019-08-29 11:17
閱讀 833·2019-08-28 18:11