在客户端,我需要一个返回true或false的帮助方法,具体取决于用户是否有资格获得付款请求。
但是,我无法真正使用Meteor.method,因为他们不会在客户端返回值。
相反,我已经这样做了,并且想知道这是否会带来任何安全漏洞或是否有更好的方法
服务器:
...
// Constants
//
_.extend(Payments, {
MINIMUM_REQUIRED_FOR_REQUEST: 100
});
// Public
//
Meteor.methods({
});
canRequestPayment = function(userId) {
var user = Meteor.users.findOne(userId, { fields: { earnings: 1 } });
if (_.isUndefined(user)) { throw new Meteor.Error('user-not-found', 'User not found'); }
return hasEnoughCreditForRequest(user) && hasNoPendingPayments(user);
};
// Private
//
var hasNoPendingPayments = function(user) {
return Payments.find({ userId: user._id, state: 'pending' }).count() === 0;
};
var hasEnoughCreditForRequest = function(user) {
var period = user.earnings.period;
return period >= Payments.MINIMUM_REQUIRED_FOR_REQUEST;
};
可以看出,我创建了两个带有var
的辅助方法,以模仿私有行为,然后我有canRequestPayment
方法,可以在文件外部访问,我打电话给客户端而不是Meteor.method
客户端:
Template.payments.helpers({
eligibleForPaymentRequest: function() {
return canRequestPayment(Meteor.userId());
},