Джой: как проверить только один из двух ключей (с массивом)? - PullRequest
0 голосов
/ 08 апреля 2020

Допустим, у меня есть user объект с id номером и roles массивом:

const user = {
  id: 1,
  roles: [ 'admin' ]
};

И проверка этого объекта должна пройти, если:

  1. id соответствует некоторому внешнему значению
  2. ИЛИ roles включает admin строку

Я пробовал этот подход, но он не работает должным образом:

const schema = Joi.object({
  id: Joi.number().valid(Joi.ref('$userId')), // shouldn't pass as $userId === 2
  roles: Joi.array().has(Joi.string().valid('admin')) // should pass as user has 'admin' role
}).or('id');

schema.validate(user, {
  context: {
    userId: 2
  }
}); // should pass as `user` includes `admin` in `roles` (but `userId` not equals `user.id`)

1 Ответ

0 голосов
/ 08 апреля 2020

Я нашел ответ, этот сценарий может быть выполнен с помощью операции when:

Joi.object({
  id: Joi.number(),
  roles: Joi.array().when('id', { 
    not: Joi.ref('$userId'), 
    then: Joi.array().has(Joi.string().valid('admin'))
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...