Files
slp-modular-cms/aidlc-docs/features/slp-modular-cms-api/construction/identity-rbac/nfr-design/authorization-design.md
T

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:
    1. Haal de rol-claim op van de huidige gebruiker.
    2. Haal de doel-gebruiker op uit de route of body.
    3. Vergelijk de numerieke waarden van beide rollen.
    4. 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 ModulePermissions tabel voor de huidige gebruiker.