你可以通过在你的
Startup
类中创建一个
CreateRoles
方法来轻松实现这一点。这有助于检查角色是否已创建,并在应用程序启动时创建角色(如果尚未创建)。就像这样:
private async Task CreateRoles(IServiceProvider serviceProvider)
{
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Store-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 _user = await UserManager.FindByEmailAsync("admin@email.com");
if(_user == null)
{
var poweruser = new ApplicationUser
{
UserName = "Admin",
Email = "admin@email.com",
};
string adminPassword = "p@$$w0rd";
var createPowerUser = await UserManager.CreateAsync(poweruser, adminPassword);
if (createPowerUser.Succeeded)
{
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
然后你可以在
Startup
类的
Configure
方法中调用
await CreateRoles(serviceProvider);
方法。确保
Configure
类中有
IServiceProvider
作为参数。
问题2:如何使任何具有管理员用户名和密码的人都可以访问这些页面?
答案2:您可以轻松地做到这一点,就像这样:
[Authorize(Roles="Admin")]
public class ManageController : Controller
{
Return View();
}
您还可以在操作方法中使用基于角色的授权。如果需要,可以分配多个角色:
[Authorize(Roles="Admin")]
public IActionResult Index()
{
}
虽然这样做可以正常工作,但为了更好的实践,你可能想要了解如何使用基于策略的角色检查。你可以在ASP.NET Core文档
这里找到相关信息,或者阅读我写的这篇文章
这里。