0

いくつかの拒否更新ルールを持つユーザー コレクションがあります。

// The roles object
Schema.roles = new SimpleSchema({
    maker: {
        type: Boolean,
        denyUpdate: true
    },
    admin: {
        type: Boolean,
        denyUpdate: true
    }
});

これらのデータはユーザー プロファイルにあります。そして明らかに、ランダムなユーザーが変更できるようにしたくありませんprofile.roles.admin。しかし、管理者ユーザーはできるはずです。

部分的に機能します。ユーザーはこのブール値を変更できません。ただし、次のサーバー側コードから変更できるはずです。

Meteor.users.update({_id: targetID'}, {$set: {'profile.roles.admin': true}});

collection2サーバーからのコードを信頼するように指示する方法はありますか?


編集:答え


以下の回答のおかげで、スキーマに現在使用しているコードは次のとおりです。

admin: {
    type: Boolean,
    autoValue: function() {
        // If the code is not from the server (isFromTrustedCode)
        // unset the update
        if(!this.isFromTrustedCode)
            this.unset();
    }
}

ブール値はisFromTrustedCode、コードが信頼できるかどうかを示します。単純。ちなみに、このautoValueオプションは、更新 (または挿入、設定、アップサート) アクションに関する完全なオブジェクトを返します。パラメータは次のとおりです。

isSet: true
unset: [Function]
value: true
operator: '$set'
field: [Function]
siblingField: [Function]
isInsert: false
isUpdate: true
isUpsert: false
userId: null
isFromTrustedCode: true

そのため、著作権ルールを非常にきめ細かく管理することが可能です。

4

1 に答える 1

1

公式ドキュメントで提供されているように、単純なオプションを使用して検証をバイパスできます。

検証をスキップするには、またはvalidate: falseを呼び出すときに オプションを使用します。クライアント (信頼されていないコード) では、これはクライアント側の検証のみをスキップします。サーバー (信頼できるコード) では、すべての検証をスキップします。insertupdate

ただし、よりきめ細かい制御が必要な場合は、を使用する代わりに、サーバーで呼び出されたときにプロパティを持つコンテキストを持つ検証タイプをdenyUpdate使用できます。customthisisFromTrustedCodetrue

于 2014-08-11T19:06:10.247 に答える