在我的Meteor应用程序中,我有三个角色:访客(只是网站访问者),客户(注册用户)和管理员用户(管理客户的超级用户)。
我已经定义了一些路线如下:
我有一个路由器文件,其中包含以下内容:
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