允许更新特定的集合属性

时间:2013-03-18 03:14:20

标签: meteor

我正在尝试向集合添加“评级”属性,并希望启用任何用户(而不仅仅是所有者)才能将评级添加到集合中的评级集。我的问题是我设置了允许/拒绝规则,以便只有所有者才能对他们拥有的集合执行更新。是否有办法允许任何用户仅在更新特定属性(“评级”集)时更新集合,并在他们尝试更新任何其他属性时拒绝更新访问权。

我在服务器上的允许/拒绝规则如下......

Playlists.allow({
  insert: function(userId, doc) {
    return (userId && doc.owner === userId);
  },
  update: function (userId, docs, fields, modifier) {
    return _.all(docs, function(doc) {
      return doc.owner === userId;
    });
  },
  remove: function (userId, docs) {
    return _.all(docs, function(doc) {
      return doc.owner === userId;
    });
  }
});

Playlists.deny({
  update: function (userId, docs, fields, modifier) {
    return _.contains(fields, 'owner');
  },
  remove: function (userId, docs) {
    return _.any(docs, function (doc) {
      return doc.locked;
    });
  },
  fetch: ['locked']
});

2 个答案:

答案 0 :(得分:3)

Playlists.deny.update中,您可以更改逻辑,以便首先检查是否有人尝试修改评级属性(例如,使用$addToSet)和return false,如果是的话。所以你最终会得到这样的代码:

 Playlists.deny({
    update: function(userId, docs, fields, modifier) {
      if (fields.ratings && modifier["$addToSet"] && modifier["$addToSet"].ratings) {
        return false; // don't deny this
      }
      else {
        return _.contains(fields, 'owner');
      }
    }
  });

答案 1 :(得分:-2)

创建Meteor.methods({updateRatePlaylist:myUpdateRatePlaylistFunction})