Я занимаюсь разработкой веб-платформы, которая обеспечивает обработку лицензий (например, создание, выставление счетов, загрузка) для определенного программного обеспечения. Бэкэнд - django 2.1.7 и фронтенд угловой.
У меня есть следующий вариант использования, и я хочу убедиться, что он уважает архитектуру REST и что он пригоден для будущего (избегайте ловушек).
Итак, у меня есть 2 apis:
- ф / userprofiles
- ф / лицензия
Эти 2 apis защищены и доступны только после входа в систему.
В моей текущей реализации GET запрашивает для этих 2 API-интерфейсов возврат только данных, относящихся к зарегистрированному пользователю, путем извлечения идентификатора и имени пользователя из информации request.user (то есть для аутентифицированного пользователя).
User with user1 name logged in (NOT admin).
GET ip/userprofiles will return user1 profile.
GET ip/licences will return user1 licences.
Другой вариант использования: администратор должен иметь доступ ко всем лицензиям и всем пользователям, и для этого я проверяю, является ли request.user администратором.
User with user10 name logged in (user10 IS admin):
GET ip/userprofiles will return ALL users profiles.
GET ip/licences will return ALL licences (for all user).
Для пользователей-администраторов apis также позволяет выполнять фильтрацию по пользователям, используя параметр строки запроса.
Является ли этот подход приемлемым с точки зрения REST, а также с точки зрения безопасности? Любые подводные камни, которые я должен остерегаться?
Должен ли я использовать для пользователей без прав администратора тот же подход, что и для пользователей с правами администратора, чтобы указать текущий идентификатор пользователя в качестве параметра строки запроса во внешнем интерфейсе, а не извлекать пользователя в бэкэнде из request.user (аутентифицированный пользователь) Информация)?
Это решение не кажется мне безопасным, но может стать ограничением на будущее (хотя в настоящее время я не вижу ни одного варианта использования, в котором пользователь должен иметь доступ к лицензиям и профилям других пользователей)