Meteor-Mongodb 用户数据发布设置
Meteor-Mongodb userdata publish settings
我要为我的学生打开一个 Meteor 网络应用程序,显然我需要将用户集合中的数据保密(每个学生都应该有权访问她自己的 'results')。但是 "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();
}
});
我的问题是:此发布设置是否足以抵御恶意用户?
简短回答:是。
请记住,您无需发布任何集合即可检索已登录用户的数据。在客户端,您无需订阅即可使用 Meteor.user()
。
因此,如果您想显示非登录用户的信息,您只需订阅userData
。
此外,请记住,当您返回 Mongo 游标时,您不必调用 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
}});
}
});
我要为我的学生打开一个 Meteor 网络应用程序,显然我需要将用户集合中的数据保密(每个学生都应该有权访问她自己的 'results')。但是 "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();
}
});
我的问题是:此发布设置是否足以抵御恶意用户?
简短回答:是。
请记住,您无需发布任何集合即可检索已登录用户的数据。在客户端,您无需订阅即可使用 Meteor.user()
。
因此,如果您想显示非登录用户的信息,您只需订阅userData
。
此外,请记住,当您返回 Mongo 游标时,您不必调用 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
}});
}
});