流星:3个角色可以访问彼此的路线

时间:2015-09-24 17:40:27

标签: meteor iron-router

在我的Meteor应用程序中,我有三个角色:访客(只是网站访问者),客户(注册用户)和管理员用户(管理客户的超级用户)。

我已经定义了一些路线如下:

  • 为客人:/ home,/ about
  • 对于客户:/ customer / dashboard,/ customer / documents,...
  • 对于admin:/ admin / dashboard,/ admin / manage

我有一个路由器文件,其中包含以下内容:

Iron.Router.hooks.requireCustomer = function () {
  if (!Meteor.user() && !Roles.userIsInRole(Meteor.userId(), 'customer')) {
    //if it's a user and the user has a role 'customer'
    if (Meteor.loggingIn()) {
      this.render('this.loadingTemplate');
    } else {
      this.render('accessDenied');
    }
  } else {
    this.next();
  }
};

Iron.Router.hooks.requireAdmin = function () {
   if (!Meteor.user() && !Roles.userIsInRole(Meteor.userId(), 'admin')) {
    if (Meteor.loggingIn()) {
      this.render('this.loadingTemplate');
    } else {
      this.render('accessDenied');
    }
  } else {
    this.next();
  }
};

Router.onBeforeAction('requireCustomer', {except: ['home', 'about']});
Router.onBeforeAction('requireAdmin', {only: ['adminDashboard']});
Router.onBeforeAction('dataNotFound', {only: ['documentIndex','documentNew', 'documentIndex', 'documentShow', 'documentEdit']});

当我在未登录时访问/ customer / dashboard或/ admin / dashboard时,一切正常(我获得访问被拒绝页面)。但是,当我以客户身份登录时,我可以访问/ admin / dashboard。显然,情况永远不应该如此。此外,当以' admin'身份登录时,我可以访问/ customer / dashboard,也不应该如此。我认为我的requireCustomer和requireAdmin钩子会覆盖它,但事实并非如此。有什么想法吗?

注意:我使用的是alanning:roles

0 个答案:

没有答案