Blazor AuthorizeView:如何使用自定义授权过滤器

问题描述 投票:0回答:1

我正在使用Blazor Boilerplate的以下代码:(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剃须刀文件中使用它。

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 };
    }
}

}

c# razor authorization blazor
1个回答
0
投票

以下代码片段描述了模板化组件:

<TableTemplate Items="pets">
<TableHeader>
    <th>ID</th>
    <th>Name</th>
</TableHeader>
<RowTemplate>
    <td>@context.PetId</td>
    <td>@context.Name</td>
</RowTemplate>
</TableTemplate>

作为元素传递的RenderFragment类型的组件参数具有一个名为context的隐式参数(例如,来自前面的代码示例@ context.PetId),但是您可以使用子元素上的Context属性更改参数名称。在以下示例中,RowTemplate元素的Context属性指定pet参数:

<TableTemplate Items="pets">
<TableHeader>
    <th>ID</th>
    <th>Name</th>
</TableHeader>
<RowTemplate Context="pet">
    <td>@pet.PetId</td>
    <td>@pet.Name</td>
</RowTemplate>
</TableTemplate>

或者,您可以在组件元素上指定Context属性。指定的Context属性适用于所有指定的模板参数。当您要为隐式子内容(不包含任何包装子元素)指定内容参数名称时,这很有用。在以下示例中,Context属性出现在TableTemplate元素上,并应用于所有模板参数:

<TableTemplate Items="pets" Context="pet">
<TableHeader>
    <th>ID</th>
    <th>Name</th>
</TableHeader>
<RowTemplate>
    <td>@pet.PetId</td>
    <td>@pet.Name</td>
</RowTemplate>
</TableTemplate>

现在,您必须已经了解上下文的来源...花了一些时间才将其内部化。

Here's a link to关于使用Blazor配置基于策略的授权的博客帖子。这是一本简单易读的书,它将指导您如何使用Blazor处理授权,尤其是在Blazor中的授权组件(例如AuthorizeView,AuthorizeRouteView等)的上下文中。阅读并尝试解决您的问题,然后提出一些具体问题。我很高兴为您提供帮助...

© www.soinside.com 2019 - 2024. All rights reserved.