# Business Rules — Unit 02: Identity & RBAC Dit document beschrijft de validatieregels en logica voor identiteitsbeheer en autorisatie. ## 1. Hiërarchische Rollen (BR-ID-01) - **Hiërarchie**: Owner (100) > Administrator (50) > User (10). - **Beperking**: Een gebruiker kan alleen acties uitvoeren op gebruikers met een **lagere** rol in de hiërarchie. - Uitzondering: Een Owner kan acties uitvoeren op andere Owners (bijv. de-activeren, mits niet de laatste Owner). - Een Administrator kan een User beheren, maar geen andere Administrator of Owner. - **Rolverandering**: Een gebruiker kan een andere gebruiker nooit een rol toekennen die hoger is dan zijn eigen rol. ## 2. Gebruikerscreatie & Uitnodiging (BR-ID-02) - **Geen Zelfregistratie**: Het systeem staat geen publieke registratie toe. - **Uitnodigingsflow**: 1. Administrator/Owner maakt een uitnodiging aan (e-mail + rol). 2. Systeem genereert een `InvitationToken` met een beperkte geldigheidsduur (bijv. 24 uur). 3. Gebruiker moet via een specifiek endpoint (`POST /api/setup/complete-invitation`) zijn wachtwoord instellen met dit token. 4. Na succesvolle instelling wordt het token ongeldig en het account geactiveerd. ## 3. Bootstrapping (BR-ID-03) - **Setup Endpoint**: Bij een lege database is een eenmalig endpoint `POST /api/setup/init` beschikbaar. - **Eerste Owner**: Dit endpoint accepteert de gegevens voor de eerste Owner. Na succesvolle aanmaak wordt dit endpoint permanent geblokkeerd of verwijderd uit de routing. ## 4. Authenticatie & Sessies (BR-ID-04) - **Wachtwoord Hashen**: Wachtwoorden moeten gehasht worden volgens de ASP.NET Core Identity standaard (PBKDF2 met HMAC-SHA256). - **Refresh Tokens**: - Refresh tokens zijn gekoppeld aan een specifieke gebruiker en client/apparaat. - Refresh tokens kunnen maar één keer worden gebruikt (Rotation-principe). - Bij gebruik van een oud refresh token worden alle actieve sessies van die gebruiker ongeldig gemaakt (beveiligingsmaatregel tegen token diefstal). ## 5. Module-specifieke Rechten (BR-ID-05) - **Fine-grained Access**: Naast de globale rollen kunnen Beheerders specifieke rechten per module toekennen aan Users. - **Default**: Zonder expliciete module-rechten heeft een User alleen leesrechten of basisrechten binnen een module (afhankelijk van de module-implementatie).