Meteor-Mongodb用户数据发布设置

时间:2018-01-12 15:23:51

标签: mongodb meteor

我即将向我的学生开放Meteor网络应用程序,我显然需要将用户集合中的数据保密(每个学生都应该可以访问自己的'结果') 。但是" admin"角色需要有更多的访问权限。这是发布信息(/server/main.js):

Meteor.publish('userData', function() {
    if (Roles.userIsInRole(this.userId, ['admin'])) {
        return Meteor.users.find({}, {fields: {
            _id: 1,
            createdAt: 1,
            username: 1,
            emails: 1,
            profile: 1,
            lastAccess: 1,
            roles: 1
            }}
        )};

    if (this.userId) {
        return Meteor.users.find({_id: this.userId}, {fields: {
             results: 1
            }
        });
    } else {
        this.ready();
    }
});

我的问题是:此发布设置是否足以抵御恶意用户?

1 个答案:

答案 0 :(得分:0)

简短回答:

请记住,您不需要发布任何集合来检索已登录用户的数据。在客户端,您可以在没有订阅的情况下使用Meteor.user()

因此,如果您想显示有关登录用户以外的用户的信息,您只需订阅userData

另外,请记住,当您返回Mongo Cursor时,您不必调用this.ready()

因此,您的出版物变为:

Meteor.publish('userData', function() {
    if (Roles.userIsInRole(this.userId, ['admin'])) {
        return Meteor.users.find({}, { fields: {
            _id: 1,
            createdAt: 1,
            username: 1,
            emails: 1,
            profile: 1,
            lastAccess: 1,
            roles: 1
        }});
    }
});