Django Rest Framework/Djoser отправка информации о ролях на фронтенд (Vue)
Я работаю над простым сайтом с функцией входа в систему. Для обработки auth в бэкенде я использую библиотеку Djoser. Функциональность входа работает. Однако теперь я хочу создать сайт на фронтенде, который имеет ограниченный доступ на основе ролей пользователей.
Я хочу, чтобы если пользователь является администратором/сотрудником, то на фронтенде сайта была другая страница в навигационной панели. Поэтому мой вопрос заключается в том, как я должен это сделать. Моя первая мысль заключается в том, что когда пользователь входит в систему, то токен отправляется на фронтенд и сохраняется, а затем вместе с токеном я также отправляю роль пользователя и сохраняю ее. Однако я не уверен, как расширить Djoser для этого.
Другим вариантом было бы просто сказать, что после того, как пользователь вошел в систему, получил токен и сохранил его во фронтенде, я бы сделал последующий запрос к бэкенду, чтобы получить информацию о пользователе, включая его роль, и сохранить ее тоже. Это, конечно, потребует 2 вызова бэкенда вместо одного, как в первом варианте.
Мне кажется оптимальным использовать первый вариант, однако я не уверен, как расширить путь входа Djoser для отправки токена и роли пользователя.
Любая помощь или советы будут приняты с благодарностью!
Ладно, я сам догадался. Оставляю это здесь, если кому-то понадобится.
Сначала я создал файл сериализатора в каталоге моего проекта (оригинальное приложение). Затем я взял TokenSerializer из Djoser и расширил его до следующего,
from rest_framework import serializers
from djoser.conf import settings
class TokenSerializer(serializers.ModelSerializer):
auth_token = serializers.CharField(source="key")
is_staff = serializers.BooleanField(source="user.is_staff", read_only=True, default=False)
class Meta:
model = settings.TOKEN_MODEL
fields = ("auth_token", "is_staff")
Я не знал, что можно использовать ключевое слово source
, с помощью которого я могу получить доступ к модели пользователя, прикрепленной к токену, и получить поле is_staff
.
Это теперь делает так, что пользователь запрашивает логин в /auth/token/login/, с данными для входа, в ответ он получает токен и информацию о том, установлено ли у пользователя поле is_staff
.