У меня есть бэкэнд .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
?