Я сделал такую функцию, которая должна проверять, запрещен ли модуль для текущего пользователя. Если это так - верните ошибку, если нет - тогда пусть он сделает остальную часть хуков / перейдет к маршруту API. Этот метод вызывается в служебных хуках.
function isAppForbidden(hook) {
return new Promise((resolve, reject) => {
hook.app.services.settings.find({
query: {
$limit: 1,
$sort: {
createdAt: -1
}
},
user: {
roleId: hook.params.user.roleId
}
}).then(res => {
if(res.data.length > 0) {
let userHiddenApps = hook.params.user.hiddenApps || [];
let globalHiddenApps = res.data[0].forbiddenApps || [];
if (userHiddenApps.indexOf('qualitydocs') >= 0 || globalHiddenApps.indexOf('qualitydocs') >= 0) {
reject(new errors.Forbidden()); //throws error for forbidden moduels
}
resolve();
}
})
})
}
before: {
all: [
authenticate('jwt'),
hook => includeBefore(hook),
hook => isAppForbidden(hook)
],
find: [],
get: [],
create: [(hook) => {
hook.data.authorId = hook.params.user.id;
}],
update: [],
patch: [],
remove: []
},
На моей локальной машине все работает просто отлично. Если модуль запрещен, я получаю ошибку Forbiden, если нет, то получаю данные с маршрута. Но на моей производственной машине это не работает таким образом, если модуль НЕ запрещен (без ошибок), я не получаю никакого ответа, как если бы он попал в какой-то цикл в части 'resol ()' ?? Является ли это возможным? это обещание выглядит хорошо для вас?
Я знаю его странный вопрос, но я не знаю, с чего начать, поскольку он прекрасно работает локально и не вызывает ошибок в работе (за исключением того, что он ломает целое приложение, больше нет ответов, пока вы не перезагрузите страницу).