3

ロール パッケージを追加してから、ゲストやメンバーなどのカスタム ユーザー ロールを設定して、有料プランで使用できるようにしようとしています。次のエラーが表示されます

Exception in defer callback: Error: When the modifier option is true, validation object must have at least one operator
at checkModifier (packages/aldeed:simple-schema/simple-schema-validation.js:271:1)
at doValidation1 (packages/aldeed:simple-schema/simple-schema-validation.js:321:1)

次の関数を実行すると

Meteor.methods({
    setUserRole: function(userId, roleToSet){
        // check(Meteor.userId(), String);
        check(userId, String );
        check(roleToSet, String);

        var user = Meteor.users.findOne(userId);

        if (_.isEmpty(user.roles)) {
            Roles.addUsersToRoles(userId, roleToSet);
        }
    }
});
4

3 に答える 3

1

このエラーはsimple-schemaによってスローされます。これは、更新メソッドが演算子を持たない修飾子 ($set、$unset、.. など) を使用して使用されていることを意味します。最新バージョンのロールパッケージでは、Roles.addUsersToRoles に関連するコードでこれを回避しているようですが、addUsersToRoles メソッドを使用する行をコメントにするとエラーが解消される場合は、

  1. 最新バージョンのロール パッケージを使用していることを確認するか、次を使用します。

    meteor update alanning:roles 
    
  2. このメソッドを呼び出すコードをチェックし、引数が正しく、正しい順序であることを確認してください

  3. グループ化されたモデルとグループ化されていないモデルを混在させていないことを確認してください (ロール パッケージを使用する場合は、常にグループを使用するか、まったく使用しないかを選択する必要があります) .. 例:

     Roles.addUsersToRoles(userId, roles, Roles.GLOBAL_GROUP)
    
于 2015-07-27T18:25:37.043 に答える
1

$setこれは多くの場合、スキーマに追加されていないフィールドにアクセスしようとしていることを意味します。

Telescope を使用している場合はUsers.addField()、Roles パッケージで必要なフィールドを呼び出すようにしてください。

于 2015-07-28T01:00:13.233 に答える