Использование метода HTTP OPTIONS динамически с авторизацией - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть внутренний сервер, на котором аутентифицированным клиентам предоставляются разрешения на различные конечные точки в зависимости от уровня их учетной записи.Таким образом, клиент может быть обычным пользователем, администратором и т. Д. И т. Д. Все мои конечные точки уже реализуют логику, необходимую для определения того, кто к чему имеет доступ.Чего мне не хватает, так это того, что клиенты могут запрашивать свои привилегии для данного ресурса.

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

GET /books/42 - all clients PUT /books/42 - all clients GET /categories/fiction/books - all clients POST /categories/fiction/books - admin only

Теперь я хочу, чтобы клиенты могли запрашивать, какие действия они будут выполнять.быть в состоянии выполнять на данном ресурсе на основе их разрешений.Это может быть полезно, например, для веб-приложения, чтобы включить / отключить кнопки для создания книг в зависимости от того, разрешено ли текущему пользователю это делать.Однако я не хочу засорять мою систему миллионами разрешений для каждого вида ресурсов, например, чтобы клиенты получали список разрешений, таких как ADD_BOOKS, UPDATE_BOOKS, ADD_CATEGORIES и т. Д., Поэтому я рассматриваю возможность использования метода HTTP OPTIONS.Есть ли передовая практика для такого механизма?

Например, должен ли HTTP OPTIONS всегда сообщать полный набор методов, которые реализованы для ресурса, или разумно динамически сообщатьчто только GET будет разрешенным методом для /categories/fiction/books, когда "пользователь" вызывает, в то время как GET, POST может быть сообщено как разрешенные методы для "администратора"?Другой подход состоит в том, чтобы всегда сообщать полный набор доступных методов, но включать дополнительную информацию о каждом методе в теле ответа HTTP OPTIONS.

Кто-нибудь видел систему, использующую OPTIONS, подобную этой?Есть ли лучшие варианты?

...