【发布时间】:2022-03-11 06:00:45
【问题描述】:
我正在使用 Blazor 样板中的代码:(BlazorBoilerPlate GitHub)
@using Microsoft.AspNetCore.Components
@inject NavigationManager navigationManager
@inject AuthenticationStateProvider authStateProvider
<AuthorizeView Context="AuthorizeContext">
<Authorized>
<MatTooltip Tooltip="Logout">
<MatIconButton Icon="exit_to_app" RefBack="@context" OnClick="LogoutClick"></MatIconButton>
</MatTooltip>
</Authorized>
<NotAuthorized>
<MatTooltip Tooltip="Login">
<MatIconButton Icon="account_box" RefBack="@context" Link="/account/login"></MatIconButton>
</MatTooltip>
</NotAuthorized>
@code {
async Task LogoutClick()
{
await ((IdentityAuthenticationStateProvider)authStateProvider).Logout();
navigationManager.NavigateTo("/account/login");
}
}
“AuthorizeContext”从何而来?依赖注入?如何在此处使用我自己的自定义授权过滤器。
只是寻找任何人都知道的关于这个特定论点的猜测或信息。
这是我的自定义 AuthorizationFilter,我不知道如何在 blazor razor 文件中使用它。
namespace BlazorBoilerplate.Shared.AuthorizationDefinitions
{ 公共类 OfficeAuthorize : IAuthorizationFilter { 私有只读字符串_scenario;
public OfficeAuthorize(string scenario)
{
_scenario = scenario;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
//context.HttpContext.Request.Query
//custom validation rule
if (_scenario == "OfficeAssignment")
{
context.Result = new ForbidResult();
}
}
}
public class OfficeAuthorizeAttribute : TypeFilterAttribute
{
public OfficeAuthorizeAttribute(int input) : base(typeof(OfficeAuthorize))
{
Arguments = new object[] { input };
}
}
}
【问题讨论】:
-
在VS中悬停上下文,你会看到:“指定所有子内容表达式的参数名称”。它没有注入到 AuthorizeView 组件中,它是您要为其子组件提供的组件上下文的名称。如果它与另一个上下文(可能是 EditForm)发生冲突,只需要给它一个名称,默认名称是“context”。
-
我不知道您到底要做什么,但 AuthorizeView 可以在 Roles 参数中采用逗号分隔的角色列表,或在 Policy 参数中采用策略名称。跨度>
标签: c# razor authorization blazor blazor-boilerplate