首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流星允许拒绝功能?

流星允许拒绝功能?
EN

Stack Overflow用户
提问于 2014-02-11 06:00:57
回答 2查看 251关注 0票数 0

在我的应用程序中,我使用了一个名为Polls_Coll的集合

这是我的允许函数

代码语言:javascript
运行
复制
Polls_Coll.allow({
            insert:function(){
                    return true;
                    },
            update:function(userId, doc, fields, modifier){
                    return (doc.owner===userId);
                    },
            remove:function(){
                return true;
            }
        });

在登录到我的帐户后,我插入了一份文档。

当我试图从客户端更新该文档值时

代码语言:javascript
运行
复制
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错误,但是当我试图从服务器端插入它时,它是工作的,这里是我如何将文档插入到集合中的。

代码语言:javascript
运行
复制
Polls_Coll.insert({question: quest,
                    option1:[{pd:op1,ids:[]}],
                    option2:[{pd:op2,ids:[]}],
                    option3:[{pd:op3,ids:[]}],
                    option4:[{pd:op4,ids:[]}]
                    });

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

EN

回答 2

Stack Overflow用户

发布于 2014-02-11 06:28:19

来自文档中的部分:

不可信代码包括客户端代码,如事件处理程序和浏览器的JavaScript控制台。 不受信任的代码只能同时修改由_id指定的单个文档。

所以,我相信,唯一允许的选择是一个_id。您可以使用$set操作符实现相同的结果,如下所示:

代码语言:javascript
运行
复制
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}});
票数 0
EN

Stack Overflow用户

发布于 2014-02-11 06:30:54

Meteor处理受信任代码的update()差异(在服务器上),而对不信任代码(在客户端上)处理不同。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21694289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档