Loopback: скрыть некоторые свойства для некоторых пользовательских ролей - PullRequest
0 голосов
/ 09 декабря 2018

Есть такая модель

{
  name,
  budget
}

И есть роль reviewer

Есть ли способ скрыть поле budget для reviewer с?

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете использовать удаленный хук для этой модели.Например, ваш код может выглядеть следующим образом:

MyModel.afterRemote('**', function(ctx, modelInstance, next) {
  if (ctx.result) {
    if (checkIfUserHasRole('reviewer')) { // <-- you need to implement this function
      // if you are going to return a list of items, eg. from Model.find(...) 
      if (Array.isArray(modelInstance)) { 
        ctx.result = ctx.result.map(item => {
          return modifyYourProperties(item); // <-- you need to implement this function
        }
      }
      // if you are going to return a single item, eg. from Model.findById(...)
      else {
        ctx.result = modifyYourProperties(ctx.result); // <-- as above...
        }

      });
    }
  }
  next();
}

Итак, теперь при каждом удаленном вызове вашей модели вы можете изменять результаты.Они уже обработаны, но еще не возвращены запрашивающей стороне, поэтому здесь вы можете скрыть нужные свойства.

Конечно, вам нужно реализовать методы checkIfUserHasRole и modifyYourProperties, чтобы делать то, что вы собираетесьдостичь.Подробнее об удаленных хуках вы можете прочитать здесь: https://loopback.io/doc/en/lb3/Remote-hooks.html

...