在Meteor.js中为不同的用户提供不同版本的网站

Serving different version of website to different users in Meteor.js

本文关键字:版本 网站 用户 Meteor js      更新时间:2023-09-26

在 Meteor.js 中,通常如何为不同的用户(例如取决于 users 集合中的字段role,该集合可以具有 adminuserstesters 等值)提供不同版本的站点(客户端和服务器端)?

首先,我使用铁路由器进行路由。 在某些时候,我可能会放弃它并编写自己的代码,至少对于这个项目,因为我没有使用一半的功能,但现在这就是我所拥有的。

对于角色,我使用的是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 中,检查用户是否具有所需的角色。 如果没有,请将它们发送到 notAuthorization 页面。 如果是,请让他们通过。 我仍然缺少一些我尚未在此代码中解决的部分,但它在大多数情况下都有效。

希望这能给你一个起点。