国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Meteor:發布與訂閱

animabear / 627人閱讀

摘要:發布與訂閱在端使用函數注冊一個的發布者,需要在客戶端對進行訂閱,使用訂閱了現在已經添加的數據就會重新出現在頁面上。利用發布訂閱模式,我們也可以實現對于私有數據的訪問。

我們可以使用安全的方法讓用戶端不直接操作數據庫,但是還是可以直接讀取數據庫內容,如果我們還需要保護私有的數據存儲,在客戶端直接使用Collection.find(),這樣的操作方式在實際的項目中并不會使用,這樣的數據無法保證私有性和安全性。如果一些數據我們并不想自動的在客戶端更新,就需要自定義publishsubscribe,如何在Meteor中自定義發布與訂閱模式呢?

Remove Autopublish

在 Meteor:方法控制中我們移除了 insecure,在這里我們需要移除autopublish。顧名思義,autopublish的意思就是meteor自動的實現數據的publish/subscribe。

meteor remove autopublish

移除之后在我們添加數據以后,頁面就不再直接顯示數據了。想要顯示數據,我們需要使用Meteor.publishMeteor.subscribe方法,讓服務端通知客戶端的數據更新。

發布與訂閱 publish
if (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函數注冊一個"languages"的發布者,需要在客戶端對"languages"進行訂閱,使用Meteor.subscribe訂閱了"languages",現在已經添加的數據就會重新出現在頁面上。
利用發布/訂閱模式,我們也可以實現對于私有數據的訪問。

給數據添加private

在頁面上添加一個private的按鈕:


添加設置為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}
        })
    }
});

客戶端調用設置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);

        }

    });
設置發布的數據必須是私有的

在Meteor.publish的可以使用filter過濾掉不是改用戶的,非私有的數據:

  Meteor.publish("languages", function () {
        return Languages.find({
            $or: [
                {private: true}
                //auth user
                //,{owner:this.userId()}
            ]
        });

    });

測試這樣的數據可以使用不通的用戶在不通的瀏覽器上面做測試,每個用戶都是只能看到自己的數據。

對刪除數據的操作做檢查

只允許用戶對于自己的數據進行刪除操作

 removeLanguage: function (_id) {
        var language=Languages.findOne(_id);
        if(language.private&&language.owner !=Meteor.userId){
                    throw new Meteor.Error("not-authorized");
        }
        Languages.remove(_id);
    }

這樣我們就能保證私有數據的安全,客戶端不能直接操作數據(remove insecure),客戶端也不直接訪問數據庫(remove autopublish),就有效的保護私有數據的安全。

項目地址 :https://github.com/jjz/meteor/tree/master/meteor-publish

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78641.html

相關文章

  • Meteor發布訂閱

    摘要:發布與訂閱在端使用函數注冊一個的發布者,需要在客戶端對進行訂閱,使用訂閱了現在已經添加的數據就會重新出現在頁面上。利用發布訂閱模式,我們也可以實現對于私有數據的訪問。 我們可以使用安全的方法讓用戶端不直接操作數據庫,但是還是可以直接讀取數據庫內容,如果我們還需要保護私有的數據存儲,在客戶端直接使用Collection.find(),這樣的操作方式在實際的項目中并不會使用,這樣的數據無法...

    leone 評論0 收藏0
  • 翻譯 Meteor React 制作 Todos - 11 - 發布訂閱

    摘要:通過發布訂閱模式過濾數據現在我們已經把應用中比較敏感的代碼放到了一些方法里面,我們還需要學習安全故事的另一半內容了。當在客戶端被調用時傳入發布器名稱,客戶端將會從發布器訂閱所有的數據。這個按鈕應該只是給任務的所有者來顯示。 通過發布訂閱模式過濾數據 現在我們已經把應用中比較敏感的代碼放到了一些方法里面,我們還需要學習Meteor安全故事的另一半內容了。到現在為止,我們一直是假設整個整個...

    用戶83 評論0 收藏0
  • 翻譯 Meteor React 制作 Todos - 12 - 下一步

    摘要:下一步干什么恭喜你剛剛成功編寫了你的應用,別忘了再部署一遍,這樣你的朋友們就可以使用這些新特性了你的應用在一個單個的任務清單中是支持合作的。檢查一下例子待辦事項。更多的可以控制分享多個列表的已完成應用。 下一步干什么? 恭喜你剛剛成功編寫了你的Meteor應用,別忘了再部署一遍,這樣你的朋友們就可以使用這些新特性了! 你的應用在一個單個的任務清單中是支持合作的。試試怎么樣添加更多的功能...

    anRui 評論0 收藏0
  • RDD的前端背包

    摘要:中文最小字體問題添加屬性以取消瀏覽器的自動調整會使原本應該調整的地方失效原本就是專為了移動端設置的屬性,桌面端不適應已修復建議通過縮小來獲得小字體。 暫時先堆在一起,等某條目里面的內容超過十條了,就單列出去。 更新歷史: 17.7.24 =ADD= typescript —> interface =ADD= alof awsome net 17.7.23 =ADD=...

    Pandaaa 評論0 收藏0
  • RDD的前端背包

    摘要:中文最小字體問題添加屬性以取消瀏覽器的自動調整會使原本應該調整的地方失效原本就是專為了移動端設置的屬性,桌面端不適應已修復建議通過縮小來獲得小字體。 暫時先堆在一起,等某條目里面的內容超過十條了,就單列出去。 更新歷史: 17.7.24 =ADD= typescript —> interface =ADD= alof awsome net 17.7.23 =ADD=...

    csRyan 評論0 收藏0

發表評論

0條評論

animabear

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<