Если у вас на проекте jwt авторизация, то логично роли записывать в токен. Это работает так:
пользователь вводит пароль и логин, на бэке, если все совпадает формируется токен-строка, в которую в payload можно положить роли.
Затем, на фронте написать interceptors, которые будут проверять токен на валидность, и в том числе, парсить роли записывать их в вашу сущность user. (юзера можно хранить в сторе, или просто в js/ts файле в виде реактивного объекта, в случае vue3. У вью мощная реактивность)
В зависимости от текущих ролей пользователя - можно показывать разные элементы на странице, и запретить доступ к некоторым роутам.
Так же, помимо ролей есть система, называемая permissions - пермишны.
Это когда внутри ролей есть еще подкатегории - например, сущность админ может быть нескольких видов - с правом редактирования, удаления, добавления контента, либо же, просто с правом удаления, без права редактирования.
Вот эти доп. условия - удаление, редактирование и тп - это и есть пермишны. Я описал пример. Система может быть разной.
Другой вариант - создать простой роут, скажем getCurrentUser, который будет возвращать текущего пользователя, вместе со всеми ролями. И дёргать роут по мере надобности - скажем, при обновлении access токена.