我最近开始使用 Meteor(与 React 结合使用),但有些事情我无法理解。
假设有一个视图,用户将看到他的“东西”,但管理员帐户将看到所有“东西”。
在客户端我有这个代码:
getMeteorData() {
let handle = Meteor.subscribe('myData');
return {
stuffReady: handle.ready(),
stuff: handle.ready() ? Stuff.find({},{sort: {'createdAt': -1}}).fetch() : undefined
};
},
在服务器上我有我的发布方法:
Meteor.publish('myData', function () {
if (this.userId) {
// if admin show all, otherwise show users stuff
if (Roles.userIsInRole(this.userId, ['admin'], 'default')) {
return Stuff.find({},{sort: {'createdAt': -1}});
}
else {
return Stuff.find({'creator._id': this.userId}, {sort: {'createdAt': -1}});
}
}
});
这对管理员来说工作正常。用户虽然可以在列表被过滤之前看到所有类似 1 的东西,但他只能看到他的东西。我认为这是预期的行为,因为我在 getMeteorData() 的返回方法中查询了所有数据。
不过我的问题是:如何立即为用户返回正确的数据?出于明显的原因,我不想在客户端代码中进行“管理员检查”。