Я готовлю приложение в ASP.NET Core (Entity Framework), где я хотел бы, чтобы некоторые функции были доступны только для определенных пользователей.
Для достижения этого в Startup.cs я добавляю следующий код
обслуживание:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>
().AddEntityFrameworkStores<ApplicationDbContext>();
Класс для создания новых пользователей по умолчанию:
public static class MyIdentityDataInitializer
{
public static void SeedData(UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager)
{
SeedRoles(roleManager);
SeedUsers(userManager);
}
public static void SeedUsers(UserManager<IdentityUser> userManager)
{
if (userManager.FindByNameAsync("user@email.com").Result==null)
{
IdentityUser user = new IdentityUser();
user.UserName = "user@email.com";
user.Email = "user@email.com";
IdentityResult result = userManager.CreateAsync(user, "Admin1").Result; //Admin1 = password
if (result.Succeeded)
{
userManager.AddToRoleAsync(user, "Administrator").Wait(); //add user to role
}
}
}
public static void SeedRoles(RoleManager<IdentityRole> roleManager)
{
if (!roleManager.RoleExistsAsync("StandardUser").Result)
{
IdentityRole role = new IdentityRole();
role.Name = "StandardUser";
IdentityResult roleResult = roleManager.CreateAsync(role).Result;
}
if (!roleManager.RoleExistsAsync("Administrator").Result)
{
IdentityRole role = new IdentityRole();
role.Name = "Administrator";
role.NormalizedName = "Administrator";
IdentityResult roleResult = roleManager.CreateAsync(role).Result;
}
}
}
}
и в методе Configure я называю этот класс:
MyIdentityDataInitializer.SeedData(userManager, roleManager);
В контроллере, где я хотел бы ограничить действие
[Authorize(Roles = "Administrator")]
public IActionResult ConfigurationPortal()
{
.....
}
Текущая ситуация:
Я могу проверить в базе данных, что пользователь и роли созданы (базы данных ASPNetUser, ASPNetRoles), также в базе данных ASPNetUserRoles существует строка, где пользователь отображается как администратор.
После запуска приложения я могу войти, но когда я пытаюсь открыть ConfigurationPortal () (или другой ограниченный метод), отображается информация об ограниченном доступе. Похоже, что администратор не распознается как администратор.
Ожидаемая ситуация; когда пользователь присоединен к администратору роли, он может получить доступ к ограниченным методам.