Section 2 of 6
Role-Based Authorization
🎯 What You'll Learn
- What are roles
- Creating roles
- Assigning users to roles
- [Authorize(Roles)] attribute
- Checking roles in code
What are Roles?
Roles group users with similar permissions. Common roles include Admin, Manager, User, etc.
Creating Roles
Create Roles with RoleManager
C#
public class SeedData
{
public static async Task InitializeAsync(RoleManager<IdentityRole> roleManager)
{
string[] roles = { "Admin", "Manager", "User" };
foreach (var role in roles)
{
if (!await roleManager.RoleExistsAsync(role))
{
await roleManager.CreateAsync(new IdentityRole(role));
}
}
}
}
Assigning Users to Roles
Add User to Role
C#
await _userManager.AddToRoleAsync(user, "Admin");
// Add to multiple roles
await _userManager.AddToRolesAsync(user, new[] { "Manager", "User" });
[Authorize(Roles)] Attribute
Single Role
Require Admin Role
C#
[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
public IActionResult Index()
{
return View();
}
}
Multiple Roles (OR)
Require Admin OR Manager
C#
[Authorize(Roles = "Admin,Manager")]
public IActionResult Dashboard()
{
return View();
}
Multiple Roles (AND)
Require Admin AND Manager
C#
[Authorize(Roles = "Admin")]
[Authorize(Roles = "Manager")]
public IActionResult SuperAdmin()
{
return View();
}
Checking Roles in Code
Check User Role
C#
if (User.IsInRole("Admin"))
{
// Admin-specific logic
}
In Views
HTML
@if (User.IsInRole("Admin"))
{
<a href="/admin">Admin Panel</a>
}
InvenTrack Example
ProductsController.cs
C#
public class ProductsController : Controller
{
[Authorize]
public IActionResult Index()
{
return View(); // All authenticated users
}
[Authorize(Roles = "Admin,Manager")]
public IActionResult Create()
{
return View(); // Admin or Manager only
}
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Delete(int id)
{
// Admin only
var product = await _context.Products.FindAsync(id);
_context.Products.Remove(product!);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
Key Takeaways
- Roles: Group users with similar permissions
- RoleManager: Create and manage roles
- AddToRoleAsync(): Assign user to role
- [Authorize(Roles)]: Require specific role(s)
- Comma-separated: OR logic (Admin,Manager)
- Multiple attributes: AND logic
- User.IsInRole(): Check role in code/views