将钩子相互组合(钩子中的钩子)

时间:2016-10-18 09:27:51

标签: feathersjs

是否可以在另一个钩子中使用像restrictToOwner这样的钩子?例如,我希望用户一般只能更新自己的信息,但我也希望他们能够访问其他用户的特定属性。因此,如果存在特定的查询参数,请说出关于用户的评论,我希望用户通过,否则我想使用restrictToOwner挂钩。当然我可以编写自己的等效restrictToOwner钩子,但如果可能的话,我想利用现有的钩子(?)。下面的代码不起作用,但我想要类似的东西:

module.exports = function(options) {
  return function(hook) {
    if (typeof hook.data.comment !== 'undefined')
      return hook;
    return auth.restrictToOwner({ ownerField: '_id' });
  };
};

我想要做的另一件类似事情是,只有当请求是外部调用时才执行挂钩。我的内部脚本应该有无限制的访问权类似的东西:

// user/hooks/index.js
exports.before = {
  patch: [
    globalHooks.ifExternal(auth.restrictToOwner({ ownerField: '_id' }))
  ]
};
// hooks/index.js
exports.ifExternal = function(func) {
  return function(hook) {
    if (typeof hook.params.provider === 'undefined') //? if internal
      return hook;
    return func;
  };
};

提前致谢!

1 个答案:

答案 0 :(得分:1)

auth.restrictToOwner是一个函数,它返回另一个使用钩子对象的函数。

所以你需要这样称呼它:

return auth.restrictToOwner({ ownerField: '_id' })(hook);

关于你的第二个问题:

if (!hook.params.provider) {
  // internal only stuff here.
}