在Meteor.js中,一般如何为不同的用户提供(例如,取决于role
集合中的字段users
,其中admin
可以包含users
,{{1} },testers
)网站的不同版本(客户端和服务器端)?
答案 0 :(得分:1)
首先,我使用Iron Router进行路由。在某些时候,我可能会删除它并编写我自己的,至少对于这个项目,因为我没有使用一半的功能,但是现在这就是我所拥有的。
对于角色,我使用alanning:roles
包。再一次,我可以写自己的,但它现在也做我需要它,所以我很高兴。
接下来我有一个我写的自定义包。在其中我设置了一个用于登录和注销的模板,包括路由等。我还提供了一个实用程序类,它提供了一个名为authenticationRequired
的函数。此函数将检查当前用户是否已登录,以及是否传递了角色,因为他们具有这些角色。代码如下所示:
AccountUtils.authenticationRequired = function(router, roles) {
if (!router) {
throw new Meteor.Error(500, 'Router is a required parameter');
}
if (!Meteor.loggingIn()) {
var currUser = Meteor.user();
if (currUser) {
if (roles) {
if (!Roles.userIsInRole(currUser, roles)) {
console.log('User was not in the required roles: %j, %j', currUser.roles, roles);
//throw new Meteor.Error(403, 'Access Denied');
Router.go('notAuthorized');
}
}
} else {
console.log('User not found');
Router.go(AccountUtils.settings.signinRoute);
}
}
}
现在,在我的Router
路由器中,我做了类似的事情:
this.route('admin', {
path: '/admin',
onBeforeAction: function() { AccountUtils.authenticationRequired(this, ['ADMIN']); }
});
所有这些都有一些活动部分,但这就是它的开玩笑。在路径的onBeforeAction中,检查用户是否具有所需角色。如果没有,请将它们发送到notAuthorize页面。如果他们是,让他们通过。我仍然遗漏了一些我在这段代码中尚未解决的问题,但它在很大程度上都有效。
希望能为您提供一个起点。