4

コレクションに「評価」プロパティを追加しようとしていますが、所有者だけでなく、すべてのユーザーがコレクション内の評価セットに評価を追加できるようにしたいと考えています。私の問題は、所有者のみが所有するコレクションの更新を実行できるように、許可/拒否ルールを設定していることです。ユーザーが特定のプロパティ (「評価」セット) を更新している場合にのみコレクションを更新できるようにし、他のプロパティを更新しようとしている場合は更新アクセスを拒否する方法はありますか?

サーバーでの許可/拒否ルールは次のとおりです...

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']
});
4

2 に答える 2

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');
      }
    }
  });
于 2013-03-18T10:00:09.997 に答える
-2

Meteor.methods({updateRatePlaylist:myUpdateRatePlaylistFunction}) を作成します。

于 2013-03-18T10:02:57.503 に答える