1.5 KiB
1.5 KiB
Authorization Design — Unit 02: Identity & RBAC
Dit document beschrijft de technische implementatie van de hiërarchische autorisatie.
1. HierarchicalRoleRequirement
We maken gebruik van een custom requirement om rollen te vergelijken.
public class HierarchicalRoleRequirement : IAuthorizationRequirement
{
public HierarchicalRoleRequirement(string minimumRequiredRole)
{
MinimumRequiredRole = minimumRequiredRole;
}
public string MinimumRequiredRole { get; }
}
2. HierarchicalRoleHandler
De handler valideert of de rollen-hiërarchie wordt gerespecteerd.
- Logic:
- Haal de rol-claim op van de huidige gebruiker.
- Haal de doel-gebruiker op uit de route of body.
- Vergelijk de numerieke waarden van beide rollen.
- Slaag alleen als de huidige gebruiker een hogere of gelijke rol heeft (afhankelijk van de actie).
3. Setup Endpoint Protection
Het SetupController.Init endpoint controleert direct in de database of er al een Owner bestaat:
[HttpPost("init")]
public async Task<IActionResult> Init(SetupRequest request)
{
var anyOwner = await _userManager.GetUsersInRoleAsync("Owner");
if (anyOwner.Any())
{
return Forbidden("Systeem is reeds geïnitialiseerd.");
}
// Verwerk creatie...
}
4. Module-specifieke Policies
Er worden dynamische policies aangemaakt voor module-permissies:
- Patroon:
Module:{ModuleName}:{Permission}(bijv.Module:Blog:Delete). - De handler controleert de
ModulePermissionstabel voor de huidige gebruiker.