# Business Logic Model — Unit 02: Identity & RBAC Dit document beschrijft de processen en datastromen voor authenticatie en autorisatie. ## 1. Authenticatie Flow (JWT) ```mermaid sequenceDiagram participant Client participant AuthController participant AuthService participant UserManager participant Database Client->>AuthController: Login(Email, Password) AuthController->>AuthService: AuthenticateAsync(Email, Password) AuthService->>UserManager: FindByEmailAsync(Email) UserManager->>Database: Get User Database-->>UserManager: User Data UserManager->>UserManager: CheckPasswordAsync(User, Password) AuthService->>AuthService: GenerateTokens(User) AuthService->>Database: Save RefreshToken AuthService-->>AuthController: AccessToken, RefreshToken AuthController-->>Client: 200 OK (Tokens) ``` ## 2. Uitnodigingsproces ```mermaid graph TD A[Admin/Owner] -->|Create Invitation| B(InvitationService) B -->|Generate Token| C(InvitationToken) C -->|Save to DB| D[(Database)] B -->|Send Email| E[User] E -->|Click Link| F[Setup Page] F -->|Submit Password + Token| G(SetupController) G -->|Validate Token| B B -->|Create Account| H(UserManager) H -->|Activate User| D ``` ## 3. Hiërarchische Autorisatie Logic De autorisatie wordt afgehandeld via ASP.NET Core `AuthorizationPolicies`. - **Policy: `RequireLowerRole`**: - Haalt de rol van de huidige gebruiker (X) en de doelgebruiker (Y) op. - Vergelijkt de numerieke waarden van de rollen. - Slaagt alleen als `RoleValue(X) > RoleValue(Y)` (of `X == Y` en `X == Owner`). ## 4. Token Refresh Logic 1. Client stuurt `Expired Access Token` + `Refresh Token`. 2. Systeem controleert of `Refresh Token` bestaat in de database en niet verlopen is. 3. Systeem controleert of `Refresh Token` al eerder is gebruikt (Re-use detection). 4. Indien geldig: - Genereer nieuw `Access Token`. - Genereer nieuw `Refresh Token` (Rotation). - Verwijder/Invalideer het oude `Refresh Token`. 5. Indien ongeldig of re-use: - Trek alle tokens van de gebruiker in. - Retourneer `401 Unauthorized`.