Mein Kommentar wurde gelöscht, weil ich einen Link zu einer ähnlichen Frage bereitgestellt habe, die ich hier beantwortet habe . Ergo werde ich diesmal ausführlicher antworten. Hier geht.
Sie können dies einfach tun, indem Sie eine CreateRoles
Methode in Ihrer startup
Klasse erstellen . Auf diese Weise können Sie überprüfen, ob die Rollen erstellt wurden, und die Rollen erstellen, wenn dies nicht der Fall ist. beim Start der Anwendung. Wie so.
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");
}
}
}
Anschließend können Sie die CreateRoles(serviceProvider).Wait();
Methode über die Configure
Methode in der Startup-Klasse aufrufen . Stellen Sie sicher, dass Sie IServiceProvider
als Parameter in der Configure
Klasse haben.
Verwenden der rollenbasierten Autorisierung in einem Controller zum Filtern des Benutzerzugriffs: Frage 2
Sie können dies einfach so tun.
[Authorize(Roles="Manager")]
public class ManageController : Controller
{
}
Sie können auch eine rollenbasierte Autorisierung in der Aktionsmethode verwenden. Weisen Sie mehrere Rollen zu, wenn Sie so wollen
[Authorize(Roles="Admin, Manager")]
public IActionResult Index()
{
}
Dies funktioniert zwar einwandfrei, aber für eine viel bessere Vorgehensweise sollten Sie sich über die Verwendung richtlinienbasierter Rollenprüfungen informieren. Sie finden es in der ASP.NET-Kerndokumentation hier oder in diesem Artikel, den ich hier geschrieben habe