我正在编写我的应用程序的一部分,它要求用户具有“操作员”角色。我正在 FlowRouter 的triggersEnter函数中检查这一点。我希望向没有操作员角色的用户显示受限访问页面。
我使用 FlowRouter、Roles 和 brettle:accounts-deluxe,它会自动以访客身份登录每个访客。
这是我的代码,routes.js:
FlowRouter.route('/switchboard', {
name: 'switchboard',
triggersEnter: [function (context, redirect, stop) {
if (!Roles.userIsInRole(Meteor.userId(), ['operator'])) {
BlazeLayout.render('main', {
content: 'restrictedAccess'
});
stop();
}
}],
action: function () {
BlazeLayout.render('main', {
content: 'switchboard'
});
}
});
本地主机上的一切都按预期工作,但是当应用程序使用mup, 在服务器上运行时triggersEnter,运行时Meteor.user()是undefined(Meteor.userId() 返回 ok),并且Roles.userIsInRole调用的结果是false,尽管在数据库中查找很清楚用户具有操作员角色。
我认为在运行 triggersEnter 时用户订阅不可用,这意味着用户集合未在客户端上发布。我有这种感觉,因为如果我通过单击链接访问路由,则 userIsInRole 结果是可以的,但是如果我刷新页面,我会遇到所描述的问题。我想知道为什么这只发生在服务器上,我该如何解决。