Meteor JS - 允许/拒绝规则

5
在示例应用程序“parties”中,有一组允许/拒绝规则用于Parties集合。 插入规则如下所示:insert
Parties.allow({
  insert: function (userId, party) {
    return false; // no cowboy inserts -- use createParty method
  },...

同时在方法createParty中,实现了Parties.insert({....}),但这种情况不受应用于Parties集合的规则影响。
.....
return Parties.insert({
      owner: this.userId,
      x: options.x,
      y: options.y,
      title: options.title,
      description: options.description,
      public: !! options.public,
      invited: [],
      rsvps: []
    });
.....

有人可以解释一下为什么createParty方法不受规则影响吗?
谢谢。
1个回答

10

createParty位于Meteor.methods中,通过从客户端调用Meteor.call('createParties'在服务器和客户端上运行。在客户端上,它不会插入任何数据,但在服务器上运行的方法将插入party。

Meteor的allowdeny规则控制直接来自客户端的内容,并不适用于在服务器端运行的任何内容。


尝试快速证明Akshat关于Meteor.methods仅在服务器上运行的说法。看起来是真的: - Jevgenijs Golojads
并非总是如此。如果一个方法对客户端可用(例如没有包装在Meteor.isServer中),那么客户端和服务器都将执行该方法调用。您可以通过在createParty方法顶部添加console.log来简单地查看这一点。 - David Weldon
更新了答案,包括我不知道它也在客户端上运行,然后我意识到我总是把它们放在Meteor.isServer块中。 - Tarang
1
另外需要注意的是:Meteor 只需要一个 allow 就可以表示允许。如果你有多个 allow,它们并不会全部生效。如果你想确保一个恶意插入被拒绝,使用 deny。此外,如果你使用了 deny,你必须至少有一个 allow(即使它是 return true;)。 - David Wihl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接