После большого количества поисков ответ оказался относительно простым. Решение Мухаммада Хаммада Маруфа, хотя и технически правильное, сбило меня с толку и было в основном бесполезным для работы со страницей реестра, в частности. для настройки ролей:
@code {
protected override async Task OnParametersSetAsync()
{
await SetUpAuth();
}
private async Task SetUpAuth()
{
const string Manager = "Manager";
string[] roles = { Manager };
foreach (var role in roles)
{
var roleExist = await roleManager.RoleExistsAsync(role);
if (!roleExist)
{
await roleManager.CreateAsync(new IdentityRole(role));
}
}
var user = await userManager.FindByEmailAsync(config.GetValue<string>("AdminUser"));
if (user != null)
{
await userManager.AddToRoleAsync(user, Manager);
}
}
}
Разрешить соответствующему пользователю быть отмеченным как администратор. На этой странице есть тег [AllowAnonymous], позволяющий пользователю с правами администратора, как указано в "AdminUser": "SomeEmail@test.com" на странице appsettings. json, иметь доступ к сайту при начальной настройке.
Предотвратить доступ к самому сайту Blazor от анонимных пользователей было так же просто, как добавить эту строку в ConfigureServices в классе запуска (код взят из Microsoft Docs )
services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
Таким образом, разрешить доступ к странице регистрации было значительно проще, чем я думал изначально (вероятно, из-за отсутствия у меня опыта. net). Для этого все, что вам нужно сделать, это найти страницу Register.cs html .cs (я изначально не мог найти метод контроллера, упомянутый Мухаммедом), что я сделал, используя визуальную студию, чтобы щелкнуть правой кнопкой мыши по модели регистрации и затем go до определения. Это приведет вас к странице Register.cs html .cs с классом RegisterModel. Чтобы ограничить доступ к этой странице только для определенной роли пользователей c, все, что вам нужно сделать, это изменить тег [AllowAnonymous] над классом, чтобы он выглядел примерно так:
[Authorize(Roles ="Manager")]
public class RegisterModel : PageModel
Это Важно отметить, что тот же метод, который использовался для защиты страницы регистрации, можно использовать для защиты любой из других шаблонных страниц идентификации. Для приложений, в которых у вас может быть несколько ролей, предложенный Мухаммедом метод использования авторизации на основе политик может быть способом go, а эта ссылка, которую он предоставил , является отличным руководством по настройке и используя эту форму аутентификации.