所有这些都来自routes.js
档案......
首先,只有三个路由进行new
操作,然后是两个视图,根据角色不同地列出这些项目;一个用于director
,一个用于actor
。
/////////////////////////////////////////////////////////
// Routes
Router.route('/:_id/new_audition', {
name: 'newAudition',
controller: 'NewAuditionController',
action: 'new',
where: 'client'
});
Router.route('/:_id/feed', {
name: ':UserFeed',
controller: 'FeedController',
action: 'view',
where: 'client'
});
Router.route('/:_id/list_auditions', {
name: 'listAuditions',
controller: 'ListAuditionsController',
action: 'view',
where: 'client'
});
然后,我只是定义onBeforeAction行为,以便actors
用户可以查看list_auditions
视图,导演可以访问其他两个。
/////////////////////////////////////////////////////////
// Functions for use with Router Hooks
var forDirectorsOnly = function() {
if (!Roles.userIsInRole(Meteor.user(), 'director')) {
toastr.error("Only directors can view that page", "Invalid Permissions");
Router.go("myProfile");
}
else {
console.log("Director trying to view a page");
this.next();
}
};
var forActorsOnly = function() {
if(!Roles.userIsInRole(Meteor.user(), 'actor')) {
toastr.error("Only actors can view that page", "Invalid Permissions");
Router.go("myProfile");
}
else {
console.log("Actor trying to view a page");
this.next();
}
};
/////////////////////////////////////////////////////////
// onBeforeAction Declarations
Router.onBeforeAction(forDirectorsOnly, {only: ['UserFeed', 'newAudition']});
Router.onBeforeAction(forActorsOnly, {only: ['listAuditions']});
UserFeed
路线,它显示得很好。 (但console.log
消息不会显示。)newAudition
路由,它会重定向并显示权限错误。Back
时,它会正确显示newAudition
视图(并且还会显示console.log
消息。)listAuditions
视图会正确拒绝我的权限,甚至尝试通过浏览器转到Back
继续拒绝我访问。我的智慧结束了这一点,我已经看过每一个可能的问题,并尝试阅读铁路由器文档和流星角色文档,看看发生了什么,但我可以'弄清楚这一点。任何帮助将不胜感激。
答案 0 :(得分:1)
而不是Router.go(routeName)
挂钩中的onBeforeAction
使用this.render(routeName)
。我不确定为什么会出现这种情况,但在Router.go()
中使用onBeforeAction
会导致您所描述的行为类型。
答案 1 :(得分:0)
而不是限制对路径的访问和重定向,你可以尝试类似下面的模板:
<template name="newAudition">
{{#isInRole "director"}}
You cannot view this page. Go to Profile.
{{/if}}
{{#isInRole "actor"}}
How the New Audition Content
{{/if}}
</template>
此外,根据用户角色显示/隐藏导航链接。