Я начинаю с некоторой забавы Blazor, и одна из первых вещей, которые я пытаюсь сделать, - это перенести элементы меню в специальные компоненты, чтобы сделать навигацию более удобочитаемой.
Я пробую что-то вроде:
Файл: Components \ MenuItem.razor
<AuthorizeView Roles="@Roles">
<li class="nav-item px-3">
<NavLink class="nav-link" href="@Link">
<span class="oi oi-task" aria-hidden="true"></span> @Text
</NavLink>
</li>
</AuthorizeView>
@code {
public string Link { get; set; }
public string Text { get; set; }
public string Roles { get; set; }
}
Но если я использую компонент вместо идентичного содержимого в навигации, при запуске приложения ничего не загружается.
в моем навигационном меню, добавив следующее
<VM.Web.Components.MenuItem Text="Approve user requests" Link="/users/pending-approval" Roles="ADMIN, CREW" />
останавливает загрузку страницы (ошибок не вижу), но работает следующее прямо в навигационном меню
<AuthorizeView Roles="ADMIN, CREW">
<li class="nav-item px-3">
<NavLink class="nav-link" href="/users/pending-approval">
<span class="oi oi-task" aria-hidden="true"></span> Approve user requests
</NavLink>
</li>
</AuthorizeView>
Обновление, проблема заключалась в том, что мне не хватало украшения [Параметр], после этого оно сработало
Окончательный код компонента выглядит так
<AuthorizeView Roles="@Roles">
<li class="nav-item px-3">
<NavLink class="nav-link" href="@Link">
<span class="@SpanClasses" aria-hidden="true"></span> @Text
</NavLink>
</li>
</AuthorizeView>
@code {
[Parameter]
public string Link { get; set; }
[Parameter]
public string Text { get; set; }
[Parameter]
public string Roles { get; set; }
[Parameter]
public string SpanClasses { get; set; }
}
Для справки, Модуль аутентификации реализован другим программистом и работает :), он настроен так
builder.Services
.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("oidc", options.ProviderOptions);
options.UserOptions.RoleClaim = "role";
options.AuthenticationPaths.LogInFailedPath = "/";
options.AuthenticationPaths.LogOutSucceededPath = "/";
options.AuthenticationPaths.LogOutCallbackPath = "/authentication/logout-callback";
})
.AddAccountClaimsPrincipalFactory<ArrayClaimsPrincipalFactory<RemoteUserAccount>>();
AuthorityConnection = builder.Configuration.GetSection("oidc:Authority").Value;