Соединить крючки друг с другом (крючок в крючок)

Можно ли использовать хук типа 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;
  };
};

Заранее спасибо!


person tan    schedule 18.10.2016    source источник


Ответы (1)


auth.restrictToOwner — это функция, которая возвращает другую функцию, использующую объект ловушки.

Поэтому вам нужно назвать это так:

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

На ваш второй вопрос:

if (!hook.params.provider) {
  // internal only stuff here.
}
person j2L4e    schedule 18.10.2016
comment
Теперь я получаю на обоих крючках необработанный отказ от обещания Error: Cannot read property 'get' of undefined. Отладка не помогла выяснить, где возникает ошибка. feathers-socket-commons:methods Error calling users::patch +18ms { [TypeError: Cannot read property 'get' of undefined] У вас есть идея? - person tan; 18.10.2016