Маршрутизатор потока и роли фильтрации - Meteor

Я занимаюсь одной проблемой более 10 дней и не знаю, что с ней делать, поэтому надеюсь, что здесь я найду свое решение.

У меня две роли: «администратор» и «пользователь»: первый пользователь добавляется в качестве администратора благодаря пакету alanning: roles. Однако проблема в том, что я не уверен, устанавливаю ли я роль «пользователь» по умолчанию.

На рисунке ниже показан код функции createUser.

Клиент // Аккаунт // account.js

Template.signup.events({
  'submit form': function(event) {
    event.preventDefault();
    var nameVar =  event.target.signupName.value;
    var emailVar = event.target.signupEmail.value;
    var passwordVar = event.target.signupPassword.value;

    Accounts.createUser({
      name: nameVar,
      email: emailVar,
      password: passwordVar,
      profile: {
        roles: ["user"]
      } 

     });
  }
});

И код ниже - это функция Accounts.onLogin:

Клиент // Lib // routes.js

if (Meteor.user().roles = 'admin'){
  FlowRouter.go('dashboard');
}

else if (Meteor.user().roles = 'user'){
    FlowRouter.go('account');
}

Я надеюсь, что вы понимаете, в чем моя проблема, и я с нетерпением жду решения. В заключение, мне нужно иметь роли admin и user, и когда это admin, он должен перейти на маршрут / admin-dashboard, если это user, он должен перейти на / аккаунт маршрут.

Всем спасибо: D


person Samsara11    schedule 05.02.2016    source источник


Ответы (1)


Проблема здесь:

if (Meteor.user().roles = 'admin'){ // assigning, not equality check
  FlowRouter.go('dashboard');
}

else if (Meteor.user().roles = 'user'){
    FlowRouter.go('account');
}

Но поле roles - это массив, поэтому вместо этого сделайте следующее:

if (Meteor.user().roles.indexOf('admin') !== -1){
  FlowRouter.go('dashboard');
}

else if (Meteor.user().roles.indexOf('user') !== -1){
    FlowRouter.go('account');
}
person Radosław Miernik    schedule 05.02.2016
comment
На данный момент мой маршрут «админ-панель» работает хорошо, спасибо: D Однако роль «пользователь» не работает, потому что я не установил ее по умолчанию. Я пробовал это: function myCreateUser (электронная почта, пароль, имя) {var id, defaultRoles = ['default', 'user']; id = Accounts.createUser ({электронная почта: электронная почта, пароль: пароль,}); Roles.addUsersToRoles (id, defaultRoles); } Но когда я вызываю этот метод на сайте клиента, кажется, что его не существует. - person Samsara11; 08.02.2016
comment
Вместо прямой проверки рассмотрите возможность использования метода userIsInRole. А если роли по умолчанию нет, просто добавьте else блок с FlowRouter.go('somewhere') внутри. - person Radosław Miernik; 08.02.2016