Мій коментар було видалено, оскільки я надав посилання на подібне запитання, на яке я відповів тут . Ерго, цього разу я відповім на нього більш описово. Ось іде.
Це можна зробити легко, створивши CreateRoles
метод у своєму startup
класі. Це допомагає перевірити, чи створені ролі, і створює ролі, якщо їх немає; при запуску програми. Подобається так.
private async Task CreateRoles(IServiceProvider serviceProvider)
{
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Manager", "Member" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
var poweruser = new ApplicationUser
{
UserName = Configuration["AppSettings:UserName"],
Email = Configuration["AppSettings:UserEmail"],
};
string userPWD = Configuration["AppSettings:UserPassword"];
var _user = await UserManager.FindByEmailAsync(Configuration["AppSettings:AdminUserEmail"]);
if(_user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, userPWD);
if (createPowerUser.Succeeded)
{
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
а потім ви можете викликати CreateRoles(serviceProvider).Wait();
метод із Configure
методу в класі запуску. переконайтеся, що у вас є IServiceProvider
параметр у Configure
класі.
Використання рольової авторизації в контролері для фільтрування доступу користувачів: Питання 2
Ви можете зробити це легко, ось так.
[Authorize(Roles="Manager")]
public class ManageController : Controller
{
}
Ви також можете використовувати авторизацію на основі ролей у методі дії приблизно так. Призначте кілька ролей, якщо хочете
[Authorize(Roles="Admin, Manager")]
public IActionResult Index()
{
}
Хоча це працює добре, для набагато кращої практики ви можете прочитати про використання перевірок ролей на основі політик. Ви можете знайти його в основній документації ASP.NET тут або в цій статті, про яку я писав про це тут