Специфическое чванство безопасности на пути


У меня есть узел.JS API, в который я хочу добавить документацию swagger. Клиенты авторизуются через JWT, поэтому я добавил Это в безопасность:

securityDefinitions:
  UserSecurity:
    type: apiKey
    description: User is logged in
    in: header
    name: Authorization

Чем я могу добавить это в разные пути, чтобы сказать клиенту, что для этого вам нужно войти в систему.

/user/{userId}
  get:
    security:
      - UserSecurity: []

Но как добавить более конкретные ограничения безопасности? Например, пользователь может редактировать профиль только в том случае, если он зарегистрирован как этот пользователь. Или пользователь может редактировать комментарий, если у него есть статус суперадминистратора или если он является администратором для доски объявлений комментарий размещен на или регистрируется как пользователь, создавший этот комментарий.

1 2

1 ответ:

AFAIK, нет прямого способа добавить "роли" в документацию swagger.

То, что я сделал, это то, что я добавляю пользовательский раздел в файл swagger x-scope:

get:
    operationId: getToken
    x-scope:
      - merchant
    security:
      - token: []

Затем в коде я сравниваю роль пользователя с ролью, указанной в пути:

authorize: (req, def, token, callback) => {
  let scopes = req.swagger.operation["x-scope"];
  //scopes will contain ["merchant"] array

  return verifyUserAndRoles(token, scopes);
}