【问题标题】:.deny Meteor use.. can't get it to work.deny Meteor 使用.. 不能让它工作
【发布时间】:2015-06-23 17:48:30
【问题描述】:

我试图拒绝一个长度为 0 的问题。但我不太了解 Meteor 拒绝。

这就是正在发生的事情。

我正在更新问题。目前设置为“是”

我把它更新为“yessir”

我控制台记录如下:

Questions.deny({
  update: function(userId, question) {
    console.log(question.question.length);
   }
});

但结果是 3。似乎控制台记录了正在更新的字段,而不是我将其更新到的内容。

这是一个问题,因为如果这个东西在提交时不会检查它,我该如何检查输入的长度。

谁能启发我?

【问题讨论】:

    标签: javascript meteor permissions


    【解决方案1】:

    看看docs,你会发现update的第二个参数是doc

    doc 是数据库中文档的当前版本,没有建议的更新

    验证question 长度的唯一方法是查看第四个参数-modifier。这种方法的问题是您必须检查修饰符是否有所有可能的方式可以对其进行修改。从根本上说,这就是为什么允许/拒绝在除了最简单的情况之外的所有情况下都很难实现的原因。

    相反,我强烈建议使用collection2 来强制执行您的架构或使用方法来修改您的文档。

    推荐阅读:

    【讨论】:

    • Posts.deny({ update: function(userId, post, fieldNames) { // 只能编辑以下两个字段: return (_.without(fieldNames, 'url', 'title') .length > 0); } });
    • 这是来自我正在关注的教程,但似乎对他们来说它确实评估了将要更新的当前参数?你知道我该怎么做吗?
    • 您需要查看modifier - 我建议使用控制台记录它。您需要执行var value = modifier.$set.question; if (value.length > 3) {...} 之类的操作。但同样,这很糟糕的是你假设$setquestion 是如何更新的......如果它以不同的方式修改呢?简而言之,您正在做一些根本不适合/允许/拒绝的事情。
    【解决方案2】:

    Collection.deny 函数返回 trueflase。 如果你想拒绝某些标准的更新,你的代码就像这样

    Questions.deny({
    update: function(userId, question, fields, modifier) {
    // check for critera
    if(fields.question.length < 0)
    return true // denys update for question length less than 0
    else
    return false // deny = false means allow = true
    
    }
    });
    

    【讨论】:

    • 这是不正确的,因为 question 不包含建议的更新 - 这基本上是被问到的。
    • 我的意思是我无法评估当前正在更新的标准。我只会评估当前问题,而不是更新问题的内容。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2011-12-16
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多