是的,您应该为所有发布者和方法添加安全检查。
这是一个示例发布者,可确保用户在收到与该组相关的任何帖子之前已登录并且是该组的成员:
Meteor.publish('postsForGroup', function(groupId) {
check(groupId, String);
// make sure the user is a member of the group
var group = Groups.findOne(groupId);
if (!_.contains(group.members, this.userId))
throw new Meteor.Error(403, 'You must be a member of the group!');
return Posts.find({groupId: groupId});
});
这是一个示例方法,可确保在允许更改组名之前用户已登录并且是组的管理员:
Meteor.methods({
'groups.update.name': function(groupId, name) {
check(groupId, String);
check(name, String);
// make sure the user is an admin of the group
var group = Groups.findOne(groupId);
if (!_.contains(group.admins, this.userId))
throw new Meteor.Error(403, 'You must be an admin of the group!');
// make sure the name isn't empty
if (!name.length)
throw new Meteor.Error(403, 'Name can not be empty!');
return Groups.update(groupId, {$set: {name: name}});
}
});
需要注意的一个细节:如果您使用的是 Iron 路由器,请注意不要在发布者中造成任何错误。这样做,将导致waitOn
永远不会回来。如果您认为在正常操作下可能会引发错误,那么我建议您return this.ready()
不要throw new Meteor.Error
在您的发布者中。