Blazor AuthorizeView: как использовать пользовательский фильтр авторизации - PullRequest
0 голосов
/ 14 февраля 2020

Я работаю с этим кодом с 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» от? Инъекция зависимости? Как я могу использовать свой собственный фильтр авторизации здесь.

Просто ищу какие-либо догадки или информацию, которые кто-нибудь знает относительно этого аргумента c.

Вот мой пользовательский фильтр AuthorizationFilter, я не знать, как использовать его в файле бритвенного лезвия.

namespace BlazorBoilerplate.Shared.AuthorizationDefinitions

{publi c класс 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 };
    }
}

}

1 Ответ

0 голосов
/ 14 февраля 2020

Следующий фрагмент кода описывает шаблонный компонент:

<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 в дочернем элементе. В следующем примере атрибут Context элемента RowTemplate указывает параметр 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 в элементе component. Указанный атрибут 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>

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

Вот ссылка на сообщение в блоге о Настройка авторизации на основе политик с Blazor . Это легко читаемое руководство, которое покажет вам, как обращаться с авторизацией с помощью Blazor, особенно в контексте компонентов авторизации (таких как AuthorizeView, AuthorizeRouteView и т. Д. c.) В Blazor. Прочитайте и попробуйте решить ваши проблемы, а затем приходите сюда с конкретными c вопросами. Я буду рад помочь вам с этим ...

...