使用.allow或.deny过滤聊天应用程序中有关特定单词的消息

时间:2012-10-20 20:34:35

标签: meteor

至于新的流星版本,我想了解如何禁止将某些字词添加到集合中的消息。

假设我正在通过:Messages.insert({message:"Holy ducking smokes", at: new Date()});

if (Meteor.is_server)中的代码应该是什么样的,它会阻止任何包含“duck”的条目?

2 个答案:

答案 0 :(得分:1)

这样的东西?

Messages.deny({
  insert: function(userId, doc) {
    if (doc.message.match(/\bduck\b/i)) return true;
    return false;
  }
}

如果邮件包含有界词“duck”,那将拒绝客户端插入记录。显然,如果需要,你可以在那里执行其他逻辑(例如,审查)。

答案 1 :(得分:0)

我可以这样做的一种方法是在.allow内设置Meteor.is_server来测试该值是否与我过滤的值不同。

看起来应该是这样的:

    if (Meteor.is_server) {
        Messages.allow({
            insert: function (userId, doc) {
                var currentMessage = Messages.findOne({message:doc.message}) ;
                if (doc.message == 'duck') { //here i`m filtering stirngs 
                    return false;
                } else { return true; }
            },
            update: function () { (...) },
            remove: function () { (...) },
        });
    }

但我认为使用方法会更好地解决这个问题,因为对服务器端和客户端都使用单一验证规则是有意义的。