Специфическое чванство безопасности на пути
У меня есть узел.JS API, в который я хочу добавить документацию swagger. Клиенты авторизуются через JWT, поэтому я добавил Это в безопасность:
securityDefinitions:
UserSecurity:
type: apiKey
description: User is logged in
in: header
name: Authorization
Чем я могу добавить это в разные пути, чтобы сказать клиенту, что для этого вам нужно войти в систему.
/user/{userId}
get:
security:
- UserSecurity: []
Но как добавить более конкретные ограничения безопасности? Например, пользователь может редактировать профиль только в том случае, если он зарегистрирован как этот пользователь. Или пользователь может редактировать комментарий, если у него есть статус суперадминистратора или если он является администратором для доски объявлений комментарий размещен на или регистрируется как пользователь, создавший этот комментарий.
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); }