【问题标题】:Serving different version of website to different users in Meteor.js在 Meteor.js 中为不同用户提供不同版本的网站
【发布时间】:2014-11-15 08:58:22
【问题描述】:

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

【问题讨论】:

  • 通过测试你的路由和模板中的角色。如果您问“我可以根据角色发布不同的客户端代码吗?” - 那么答案是“不”。

标签: javascript node.js meteor meteorite ab-testing


【解决方案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 页面。如果是,让他们通过。在这段代码中,我仍然遗漏了一些我尚未解决的部分,但它在大多数情况下都有效。

希望能给你一个起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2011-09-26
    • 1970-01-01
    • 2018-11-16
    • 2012-01-14
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多