Initial commit with inital CMS

This commit is contained in:
2026-06-15 17:00:16 +02:00
commit 95d986790e
132 changed files with 7624 additions and 0 deletions
@@ -0,0 +1,62 @@
# 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`.