ユーザーに「オペレーター」の役割が必要なアプリのセクションを書いています。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'
});
}
});
localhost ではすべてが期待どおりに動作しますが、アプリが を使用mup
してサーバーに展開されると、実行時にtriggersEnter
( Meteor.userId() は OK を返します)、呼び出しの結果は にMeteor.user()
なりますが、データベースを見ても明らかですユーザーにはオペレーターの役割があります。undefined
Roles.userIsInRole
false
ユーザーのサブスクリプションは、triggersEnter が実行された時点では利用できないと思います。つまり、ユーザーのコレクションがクライアントに公開されていません。リンクをクリックしてルートにアクセスすると userIsInRole の結果は問題ありませんが、ページを更新すると問題が説明されるため、このような感じがします。これがサーバーでのみ発生する理由と、修正方法を知りたいです。