Meteor.methods之外的服务器方法

时间:2015-01-26 18:58:53

标签: meteor

在客户端,我需要一个返回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());
  },

0 个答案:

没有答案