Blazor Web Assembly提供了一个内置的授权系统,可以使用角色进行授权。以下是基于角色的授权解决方案的示例:
services.AddAuthorizationCore(options =>
{
options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
options.AddPolicy("User", policy => policy.RequireRole("User"));
});
@using Microsoft.AspNetCore.Authorization
@inject AuthenticationStateProvider AuthenticationStateProvider
只有管理员才能看到这段内容
只有普通用户才能看到这段内容
@code {
public string CurrentUserName { get; set; }
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
CurrentUserName = authState.User.Identity.Name;
}
}
@using Microsoft.AspNetCore.Authorization
@code {
[Parameter] public bool Visible { get; set; }
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public string Policy { get; set; }
[Inject] public IAuthorizationService AuthorizationService { get; set; }
private string display => Visible ? "block" : "none";
protected override async Task OnInitializedAsync()
{
if (!string.IsNullOrWhiteSpace(Policy))
{
var authorizationResult = await AuthorizationService.AuthorizeAsync(await AuthenticationStateProvider.GetAuthenticationStateAsync().ConfigureAwait(false), Policy);
Visible = authorizationResult.Succeeded;
}
}
}
使用这个自定义AuthorizeView组件可以更加方便地控制组件的显示或隐藏。
这样,在Blazor Web Assembly应用程序中就可以