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 回答
1

当您将架构应用于用户集合时会发生这种情况。

您可以申请两种类型的角色:

  roles: {
      type: Object,
      optional: true,
      blackbox: true
  },

或者

  roles: {
      type: [String],
      optional: true
  }

你不能同时使用两者。在您的情况下,由于您不使用其中的Roles.addUsersToRoles(userId, roleToSet);因此您需要角色模式定义的第二个示例。

请注意,如果不更改方案,您将无法使用组。

于 2015-12-20T21:33:28.377 回答