Условное рендеринг компонента Vue на основе назначения политики ASP - PullRequest
1 голос
/ 20 мая 2019

У меня есть бэкэнд .NET Core, который обслуживается Vue.js внешним интерфейсом.

У нас отношения один-ко-многим Клиент-Пользователь, и мы хотим иметь возможность назначить одного или нескольких пользователей для администрирования других пользователей для своей учетной записи клиента.

Использование Razor просмотровэто было просто, так как я мог просто использовать

UserManager.IsInRole("Admin") { // admin panel button here }...

и обслуживать нажимаемую кнопку, которая направляла бы к маршруту, авторизованному с использованием

[Authorize(Roles = "Admin")].

Во время выполнения представление Razor просто не скомпилирует кнопку панели администратора, если вы не указали правильный Role, но я изо всех сил пытаюсь достичь аналогичной / идентичной логики при использовании JWT Bearer Token иPolicy.

Я могу авторизовать Routes или Actions, используя Policy назначение:

 // Startup.cs
options.AddPolicy("User", policy => policy.RequireClaim(JwtConstants.JwtClaimIdentifiers.Rol, JwtConstants.JwtClaims.User));

// Controller.cs
[Authorize(Policy = "User")]

Но я пытаюсь решить, как условно смонтировать компонент Vue дляпанель администратора на основе политики, назначенной пользователю.

В бэкэнде все правильно авторизовано, поэтому вы не можете перемещаться или взаимодействовать с элементами управления администратора, не назначив политику Admin, но выполняя это разумнона фронтендевызывает некоторые проблемы.

Простым решением будет просто вернуть объект после успешного входа, например:

var auth = {
    Jwt: 'xxxxxxxxx',
    Policy: 'Admin'
}

, а затем сохранить Policy реквизит в LocalStorage, затем смонтируйте admin Component исходя из этого, но мне интересно, есть ли лучший способ, который не предоставит элементы управления Admin кому-то, кто может (тривиально) редактировать LocalStorage?

1 Ответ

1 голос
/ 20 мая 2019

При создании токена можно добавить информацию о пользователе внутри jwt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...