流星允许拒绝功能?

时间:2014-02-11 06:00:58

标签: mongodb meteor

在我的应用程序中,我使用的是名为 Polls_Coll

的集合

这是我的允许功能

Polls_Coll.allow({
            insert:function(){
                    return true;
                    },
            update:function(userId, doc, fields, modifier){
                    return (doc.owner===userId);
                    },
            remove:function(){
                return true;
            }
        });

我在登录帐户后插入了一个文件

当我尝试从客户端

更新该文档值时
var option_data=Polls_Coll.findOne({_id:this._id}).option2[0].pd;
            var u_name=Meteor.user().profile.name;
            Polls_Coll.update({_id:this._id,"option2.pd":option_data},{$push:{"option2.$.ids":u_name}});

它显示错误untrusted code may update using id only但是当我尝试从服务器端插入它时它正在工作 这是我如何将文档插入集合

Polls_Coll.insert({question: quest,
                    option1:[{pd:op1,ids:[]}],
                    option2:[{pd:op2,ids:[]}],
                    option3:[{pd:op3,ids:[]}],
                    option4:[{pd:op4,ids:[]}]
                    });

为什么值没有从客户端更新。

2 个答案:

答案 0 :(得分:0)

来自文档中的this部分:

  

不受信任的代码包括客户端代码,例如事件处理程序和浏览器的JavaScript控制台。

     

不受信任的代码只能一次修改单个文档,由_id指定。

所以,我相信,唯一允许的选择器是_id。您可以使用$set运算符实现相同的结果,例如:

var poll = Polls_Coll.findOne({_id: this._id});
poll.option2[0].ids.push(Meteor.user().profile.name);
Polls_Coll.update({_id: this._id}, {$set: {option2: poll.option2}});

答案 1 :(得分:0)

Meteor处理update()对于受信任代码(在服务器上)与对不受信任代码(在客户端上)不同。

  

不受信任的代码只能一次修改单个文档,由_id指定。 - 来自http://docs.meteor.com/#update

update()选择器内的任何其他条件都允许您通过尝试多个选择器来了解db对象中的内容,因此开发组已消除了这种可能性。如果您需要在更新前验证是否符合其他条件,请使用findOne()进行检查。

相关问题