Role-based Authorization in ASP.NET Core
Configuring role-based authorization in program.cs or startup.cs
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
Register useAuthorization() between UseRouting and UseEndpoints otherwise, we might run into the following issue.
Configure your application startup by adding app.UseAuthorization() in the application startup code. If there are calls to app.UseRouting() and app.UseEndpoints(…), the call to app.UseAuthorization() must go between them
How we set the role-based authorization
controller class
[Authorize(Roles = "Admin")]
public class HomeController : Controller
{
[Route("index")]
public IActionResult Index()
{
return View();
}
}
action methods
[Authorize(Roles = "SuperUser")]
[Route("time")]
public IActionResult Time() => Content(new TimeOnly().ToLongTimeString());
How to apply multiple roles
[Authorize(Roles = "SuperUser, Admin")] public IActionResult Time() => Content(new TimeOnly().ToLongTimeString());
or
[Authorize(Roles = "SuperUser")] [Authorize(Roles = "Admin")] public IActionResult Time() => Content(new TimeOnly().ToLongTimeString());
Using policy-based roles
Program.cs or Startup.cs
builder.Services.AddAuthorization(options => {
options.AddPolicy("SuperUserRights", policy => policy.RequireRole("Admin", "SuperUser", "BackupAdmin"));
});
Controller class or Action methods
[Authorize(Policy = "SuperUserRights")] public IActionResult Time() => Content(new TimeOnly().ToLongTimeString());