首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于登录用户“角色”的Meteor动态发布

基于登录用户“角色”的Meteor动态发布
EN

Stack Overflow用户
提问于 2014-10-03 00:49:00
回答 1查看 288关注 0票数 3

我希望有一些出版物,这些出版物只返回用户可以根据其角色访问的项目。我正在使用alanning:roles包来处理角色。

例如,我有一份出版物,如:

代码语言:javascript
复制
Meteor.publish('header_fields', function() {
    console.log("header_fields: %j", this.userId);
    if (Roles.userIsInRole(this.userId,['ADMIN','INSPECTOR'])) {
        // Inspectors and Admins can see all header fields
        return HeaderFields.find();
    } else {
        // Clients should only be able to see header fields for forms they have access to
        var user = Meteor.users.find({_id: this.userId});
        var formIds = [];
        _.each(Forms.find({client_id: user.profile.client_id}).fetch(), function(form) {
            this.push(form._id);
        }, formIds);
        return HeaderFields.find({form_id: {$in: formIds}});
    }
});

我遇到的问题是,在我看到的所有示例中,发布都是在服务器文件夹中的.js文件中定义的,因此在客户端首次连接时运行和获取。但是,当客户端最初连接时,用户不会登录。但是,我不知道该把这些出版物放在哪里,也不知道它应该如何运作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 00:54:02

Meteor默认地以一种优雅的方式处理这个特定的用例,引用官方文档:

this.userId 在发布函数中访问。登录用户的id,如果没有用户登录,则为null。这是不变的。但是,如果登录用户更改,则使用新值重新运行发布函数.

userId

因此,这基本上意味着,如果您在客户端订阅了一个基于this.userId返回不同文档的出版物,就像在您的示例中一样,所有内容都应该是现成的!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26171803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档