Initial commit with inital CMS
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
# Code Generation Plan — Unit 04: API Shell & Integration
|
||||
|
||||
Dit plan beschrijft de stappen voor de implementatie van de API Shell in `SlpModularCms.Api`.
|
||||
|
||||
## Implementatie Stappen
|
||||
|
||||
### 1. Voorbereiding & NuGet
|
||||
- [x] Toevoegen van NuGet packages aan `SlpModularCms.Api`:
|
||||
- `Asp.Versioning.Mvc`
|
||||
- `Swashbuckle.AspNetCore`
|
||||
- `Microsoft.AspNetCore.Authentication.JwtBearer`
|
||||
- [x] Referenties toevoegen naar:
|
||||
- `SlpModularCms.Core`
|
||||
- `SlpModularCms.Modules.Availability` (Indien niet dynamisch geladen)
|
||||
|
||||
### 2. Orkestratie & Infrastructuur
|
||||
- [x] Implementeren van de `ApiPrefixConvention`.
|
||||
- [x] Implementeren van de `ModuleOrchestrator` (Service Discovery).
|
||||
- [x] Implementeren van extensie methoden voor `IServiceCollection` en `IApplicationBuilder`.
|
||||
|
||||
### 3. Program.cs Configuratie
|
||||
- [x] Configureren van de Exception Handler middleware (Unit 01).
|
||||
- [x] Configureren van de Availability middleware (Unit 03).
|
||||
- [x] Configureren van JWT Bearer authenticatie (Unit 02).
|
||||
- [x] Configureren van de `ModuleOrchestrator` in de startup flow.
|
||||
- [x] Opzetten van Swagger met JWT support en module tagging.
|
||||
|
||||
### 4. Validatie
|
||||
- [x] Opstarten van de API en verifiëren van de `/swagger` pagina.
|
||||
- [x] Verifiëren dat `/api/v1/availability/status` werkt.
|
||||
|
||||
## Volgende Stappen
|
||||
Na de implementatie volgt de finale integratietest.
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
# Functional Design Plan — Unit 04: API Shell & Integration
|
||||
|
||||
Dit plan beschrijft de stappen voor het functioneel ontwerpen van de API Shell (Unit 04), die alle modules samenbrengt.
|
||||
|
||||
## Functional Design Stappen
|
||||
- [x] Ontwerpen van de `ModuleOrchestrator` voor dynamische discovery en registratie.
|
||||
- [x] Definiëren van de globale `Program.cs` structuur (Dependency Injection & Pipeline).
|
||||
- [x] Uitwerken van de JWT Bearer configuratie en Swagger integratie.
|
||||
- [x] Ontwerpen van de globale foutafhandeling integratie (GlobalExceptionHandler).
|
||||
- [x] Opstellen van de integratie-regels voor cross-module communicatie.
|
||||
|
||||
## Vragen voor Functional Design (Unit 04)
|
||||
|
||||
### 1. Swagger Documentatie
|
||||
**Vraag 1.1**: Hoe moeten de verschillende modules in Swagger worden weergegeven?
|
||||
- A) **Gecombineerd**: Eén grote lijst met alle endpoints van alle modules door elkaar.
|
||||
- B) **Gegroepeerd per Module**: Gebruik Swagger 'Docs' of 'Tags' om endpoints per module (bijv. Identity, Availability) te groeperen.
|
||||
|
||||
### 2. Startup Volgorde
|
||||
**Vraag 2.1**: Moeten modules in een specifieke volgorde geladen worden?
|
||||
- A) Nee, de volgorde is willekeurig (behalve Core).
|
||||
- B) Ja, we hebben een expliciete `LoadOrder` eigenschap nodig in de `IModule` interface.
|
||||
|
||||
### 3. API Versiebeheer
|
||||
**Vraag 3.1**: Moeten we API Versioning (bijv. `/api/v1/...`) direct integreren in de Shell?
|
||||
- A) Ja, configureer globale versiebeheer (v1) voor de hele API.
|
||||
- B) Nee, voor de MVP is geen versiebeheer nodig in het pad.
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts gegenereerd in `aidlc-docs/construction/api-shell/functional-design/`.
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
# NFR Design Plan — Unit 04: API Shell & Integration
|
||||
|
||||
Dit plan beschrijft de stappen voor het technisch ontwerpen van de non-functional requirements voor de API Shell (Unit 04).
|
||||
|
||||
## NFR Design Stappen
|
||||
- [x] Ontwerpen van de `ModuleOrchestrator` scanning logica.
|
||||
- [x] Uitwerken van de Swagger configuratie voor JWT en module groepering.
|
||||
- [x] Definiëren van de API Versioning configuratie (v1 prefix).
|
||||
- [x] Ontwerpen van de globale CORS policy configuratie.
|
||||
- [x] Vastleggen van de `Program.cs` extensie methoden voor module registratie.
|
||||
|
||||
## Vragen voor NFR Design (Unit 04)
|
||||
|
||||
### 1. Module Discovery Foutafhandeling
|
||||
**Vraag 1.1**: Wat moet er gebeuren als een module niet geladen kan worden (bijv. door een ontbrekende afhankelijkheid)?
|
||||
- A) **Fail Fast**: De hele API weigert op te starten. Meest veilig voor consistentie.
|
||||
- B) **Soft Fail**: Log de fout, sla de module over en start de rest van de API wel op.
|
||||
|
||||
### 2. Route Prefixing
|
||||
**Vraag 2.1**: Hoe moeten we de `/api/v1/` prefix afdwingen?
|
||||
- A) **Expliciet**: In elke Controller route attribuut (bijv. `[Route("api/v1/[controller]")]`).
|
||||
- B) **Globaal**: Via een `IApplicationModelConvention` in de Shell die alle routes automatisch prefixen.
|
||||
|
||||
### 3. Swagger Documentatie Locatie
|
||||
**Vraag 3.1**: Waar moet de Swagger UI bereikbaar zijn?
|
||||
- A) In de root (`/`).
|
||||
- B) Op het standaard pad (`/swagger`).
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de technische ontwerpen gegenereerd in `aidlc-docs/construction/api-shell/nfr-design/`.
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# NFR Requirements Plan — Unit 04: API Shell & Integration
|
||||
|
||||
Dit plan beschrijft de stappen voor het vaststellen van de non-functional requirements (NFR) voor de API Shell (Unit 04).
|
||||
|
||||
## NFR Assessment Stappen
|
||||
- [x] Vaststellen van de performance targets voor de startup tijd (module discovery).
|
||||
- [x] Definiëren van de security baseline voor CORS en HTTPS.
|
||||
- [x] Keuze van de tech stack voor API Versioning en Swagger documentatie.
|
||||
- [x] Bepalen van de logging aggregatie strategie (centraal vs per module).
|
||||
|
||||
## NFR Vragen voor Unit 04
|
||||
|
||||
### 1. Startup Performance
|
||||
**Vraag 1.1**: Wat is de maximaal acceptabele startup tijd van de API (inclusief module scanning)?
|
||||
- A) **Snel**: < 2 seconden.
|
||||
- B) **Gemiddeld**: 2-5 seconden.
|
||||
- C) **Niet kritisch**: > 5 seconden (geschikt voor monolithische startup).
|
||||
|
||||
### 2. CORS Beleid
|
||||
**Vraag 2.1**: Hoe strikt moet het CORS beleid zijn voor de MVP?
|
||||
- A) **Permissief**: Sta alle origins toe (`*`).
|
||||
- B) **Standaard**: Alleen specifieke, geconfigureerde origins toestaan via `appsettings.json`.
|
||||
- C) **Strikt**: Geen CORS ondersteuning (alleen same-origin).
|
||||
|
||||
### 3. API Documentatie
|
||||
**Vraag 3.1**: Welke Swagger UI functies moeten ingeschakeld worden?
|
||||
- A) **Volledig**: Inclusief "Try it out" en JWT Bearer authenticatie ondersteuning.
|
||||
- B) **Read-only**: Alleen documentatie, geen interactie mogelijk.
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts gegenereerd in `aidlc-docs/construction/api-shell/nfr-requirements/`.
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# Code Generation Plan — Unit 03: Availability Module
|
||||
|
||||
Dit plan beschrijft de stappen voor de implementatie van de Availability Module (Unit 03).
|
||||
|
||||
## Implementatie Stappen
|
||||
|
||||
### 1. Project Creatie
|
||||
- [x] Aanmaken van `src/SlpModularCms.Modules.Availability` (Class Library).
|
||||
- [x] Toevoegen aan de solution.
|
||||
- [x] Referentie toevoegen naar `SlpModularCms.Core`.
|
||||
|
||||
### 2. Domein Model & Data
|
||||
- [x] Implementeren van de `GlobalAvailabilityState` entiteit.
|
||||
- [x] Toevoegen van de entiteit aan de `ApplicationDbContext` (via een gedeeld interface of direct). *Noot: De DbContext zit in Core, dus we moeten mogelijk de entiteit ook in Core plaatsen of de DbContext uitbreiden via een module-extensie.*
|
||||
|
||||
### 3. Services & Middleware
|
||||
- [x] Implementeren van `PersistentAvailabilityService` (in de module).
|
||||
- [x] Implementeren van de `AvailabilityMiddleware` (in de module of Shell).
|
||||
- [x] Implementeren van de `AvailabilityController`.
|
||||
|
||||
### 4. Testing
|
||||
- [x] Aanmaken van `SlpModularCms.Modules.Availability.Tests`.
|
||||
- [x] Testen van de middleware blokkade en de circuit breaker logica.
|
||||
|
||||
## Volgende Stappen
|
||||
Na de project-setup volgt de implementatie van de service en middleware.
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# Functional Design Plan — Unit 03: Availability Module
|
||||
|
||||
Dit plan beschrijft de stappen voor het functioneel ontwerpen van de Availability Module (Unit 03).
|
||||
|
||||
## Functional Design Stappen
|
||||
- [x] Definiëren van de `StubAvailabilityService` gedrag (altijd beschikbaar in MVP).
|
||||
- [x] Ontwerpen van de `AvailabilityController` voor publieke status check.
|
||||
- [x] Uitwerken van de "Remote Shutdown" interface (placeholder).
|
||||
- [x] Opstellen van de business rules voor beschikbaarheids-gebaseerde toegang.
|
||||
|
||||
## Vragen voor Functional Design (Unit 03)
|
||||
|
||||
### 1. Beschikbaarheidsstatus
|
||||
**Vraag 1.1**: Welke informatie moet het publieke `GET /api/availability/status` endpoint teruggeven?
|
||||
- A) **Simpel**: Alleen een boolean `isAvailable`.
|
||||
- B) **Gedetailleerd**: Een status string (`Available`, `Maintenance`, `Degraded`) en een timestamp.
|
||||
- C) **Extended**: Inclusief versie informatie van de API en geladen modules.
|
||||
|
||||
### 2. Remote Shutdown Mechanisme
|
||||
**Vraag 2.1**: Voor de toekomstige "remote shutdown" functionaliteit (FR-05): hoe moet dit mechanisme in de architectuur verankerd worden?
|
||||
- A) **Middleware**: Een globale middleware die de `IAvailabilityService` checkt bij elk request en 503 Service Unavailable retourneert indien niet beschikbaar.
|
||||
- B) **Filter**: Een globaal Action Filter voor controllers.
|
||||
- C) **Manual Check**: Modules checken zelf de status indien nodig (niet aanbevolen voor consistentie).
|
||||
|
||||
### 3. Bypass voor Beheerders
|
||||
**Vraag 3.1**: Mogen Beheerders en Owners de API nog wel gebruiken als de status op "Niet Beschikbaar" staat (bijv. voor onderhoud)?
|
||||
- A) Ja, Beheerders/Owners moeten altijd toegang hebben om het systeem te kunnen herstellen.
|
||||
- B) Nee, als het systeem uit staat, staat het voor iedereen uit.
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts gegenereerd in `aidlc-docs/construction/availability-module/functional-design/`.
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# NFR Design Plan — Unit 03: Availability Module
|
||||
|
||||
Dit plan beschrijft de stappen voor het technisch ontwerpen van de non-functional requirements voor Unit 03.
|
||||
|
||||
## NFR Design Stappen
|
||||
- [x] Ontwerpen van de `AvailabilityMiddleware` en de bypass logica.
|
||||
- [x] Definiëren van de `PersistentAvailabilityService` implementatie.
|
||||
- [x] Uitwerken van het database schema voor de globale status.
|
||||
- [x] Ontwerpen van de `AvailabilityController` endpoints (publiek status, beheer status).
|
||||
- [x] Vastleggen van de integratie met de `AuditLogs` (Unit 02).
|
||||
|
||||
## Vragen voor NFR Design (Unit 03)
|
||||
|
||||
### 1. Middleware Registratie
|
||||
**Vraag 1.1**: Waar moet de `AvailabilityMiddleware` in de pipeline worden geplaatst?
|
||||
- A) **Helemaal vooraan**: Zelfs vóór de exception handler en logging (maximaal effectief, maar minder informatie bij fouten).
|
||||
- B) **Na de Exception Handler**: Fouten in de check worden dan netjes afgevangen door de globale handler (Aanbevolen).
|
||||
- C) **Na Authentication**: Dan weten we al wie de gebruiker is (nodig voor de bypass check), maar dan is de authenticatie overhead al geweest voor geblokkeerde requests.
|
||||
|
||||
### 2. Status Update Endpoint
|
||||
**Vraag 2.1**: Hoe moet het endpoint voor het wijzigen van de status beveiligd worden?
|
||||
- A) **Policy-based**: Gebruik de `OwnerOnly` policy (Unit 02).
|
||||
- B) **Internal-only**: Alleen bereikbaar vanaf de lokale host of via een intern netwerk (minder flexibel voor cloud beheer).
|
||||
|
||||
### 3. Fallback Gedrag (Circuit Breaker)
|
||||
**Vraag 3.1**: Als de database herhaaldelijk onbereikbaar is voor de status-check, hoe lang moet de fallback status (`Available`) worden aangehouden voordat we het opnieuw proberen?
|
||||
- A) Elke request opnieuw proberen.
|
||||
- B) Implementeer een eenvoudige circuit breaker (bijv. 30 seconden fallback na 3 opeenvolgende fouten).
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de technische ontwerpen gegenereerd in `aidlc-docs/construction/availability-module/nfr-design/`.
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# NFR Requirements Plan — Unit 03: Availability Module
|
||||
|
||||
Dit plan beschrijft de stappen voor het vaststellen van de non-functional requirements (NFR) voor de Availability Module (Unit 03).
|
||||
|
||||
## NFR Assessment Stappen
|
||||
- [x] Vaststellen van de performance overhead van de Availability Middleware.
|
||||
- [x] Definiëren van de betrouwbaarheidseisen voor de status check (bijv. caching).
|
||||
- [x] Beveiligen van het onderhouds-bypass mechanisme.
|
||||
- [x] Keuze van de opslag voor de dynamische status (Config vs Cache vs Database).
|
||||
|
||||
## NFR Vragen voor Unit 03
|
||||
|
||||
### 1. Performance
|
||||
**Vraag 1.1**: Wat is de maximale toegestane latency die de Availability Middleware mag toevoegen aan elk request?
|
||||
- A) **Ultra-laag**: < 1ms (vereist in-memory check zonder database/I/O).
|
||||
- B) **Laag**: 1-5ms (staat een snelle cache of config check toe).
|
||||
- C) **Gemiddeld**: < 10ms.
|
||||
|
||||
### 2. Status Opslag & Wijziging
|
||||
**Vraag 2.1**: Hoe moet een beheerder de status van de API kunnen wijzigen in de MVP?
|
||||
- A) **Static**: Alleen via `appsettings.json` (vereist herstart of config-reload).
|
||||
- B) **Dynamic (In-Memory)**: Via een specifiek (beveiligd) endpoint dat de status in het geheugen aanpast (gaat verloren bij herstart).
|
||||
- C) **Persistent**: Via de database, zodat de status over herstarts heen behouden blijft.
|
||||
|
||||
### 3. Caching
|
||||
**Vraag 3.1**: Moet de resultaat van de beschikbaarheidscheck gecached worden in de middleware?
|
||||
- A) Nee, altijd de actuele status ophalen via de service.
|
||||
- B) Ja, voor een korte duur (bijv. 1 seconde) om performance te optimaliseren bij hoge belasting.
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts gegenereerd in `aidlc-docs/construction/availability-module/nfr-requirements/`.
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
# Code Generation Plan — Unit 01: Core Base
|
||||
|
||||
Dit plan beschrijft de stappen voor de initiële implementatie van de Core Base (Unit 01).
|
||||
|
||||
## Implementatie Stappen
|
||||
- [x] Aanmaken van het `SlpModularCms.Core` class library project.
|
||||
- [x] Toevoegen van het project aan de solution (`SlpModularCms.sln`).
|
||||
- [x] Implementeren van de basis types en interfaces (Functional Design):
|
||||
- [x] `IModule`
|
||||
- [x] `IAvailabilityService`
|
||||
- [x] `AvailabilityStatus` (Enum)
|
||||
- [x] `ModuleInfo` (Record)
|
||||
- [x] Implementeren van de NFR componenten (NFR Design):
|
||||
- [x] `GlobalExceptionHandler` (IExceptionHandler)
|
||||
- [x] `ApiErrorResponse`
|
||||
- [x] `ModuleOrchestrator` interfaces en basis logica (Verplaatst naar U04 Shell).
|
||||
- [x] Opzetten van het Unit Test project `SlpModularCms.Core.Tests`.
|
||||
- [x] Implementeren van de eerste unit tests voor de Exception Handler en Availability Service.
|
||||
|
||||
## Vragen voor Code Generation (Unit 01)
|
||||
1. **Namespace**: Gaan we akkoord met de namespace `SlpModularCms.Core` voor de basis types?
|
||||
2. **Project Locatie**: De `unit-of-work.md` suggereerde `src/SlpModularCms.Core/`. Moet deze map aangemaakt worden in de root? (Huidige root bevat al `SlpModularCms.Api/` direct in de root).
|
||||
|
||||
## Volgende Stappen
|
||||
Na bevestiging van de projectstructuur start de daadwerkelijke code generatie.
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
# Functional Design Plan — Unit 01: Core Base
|
||||
|
||||
Dit plan beschrijft het gedetailleerde functionele ontwerp voor het fundament van de SlpModularCms API.
|
||||
|
||||
## Stap 1: Business Logic Modeling
|
||||
- [x] Modelleren van de module-levenscyclus (Discovery -> Registration -> Initialisation).
|
||||
- [x] Beschrijven van de orkestratie tussen de API Shell en de Core Base interfaces.
|
||||
|
||||
## Stap 2: Domain Entities & Interfaces
|
||||
- [x] Definiëren van de `IModule` interface structureel.
|
||||
- [x] Definiëren van de `IAvailabilityService` contracten.
|
||||
- [x] Modelleren van gedeelde DTO's (bijv. `AvailabilityDetails`).
|
||||
- [x] Genereer `aidlc-docs/construction/core-base/functional-design/domain-entities.md`.
|
||||
|
||||
## Stap 3: Business Rules & Validation
|
||||
- [x] Vastleggen van validatieregels voor module-namen en versies.
|
||||
- [x] Definiëren van de standaard "IsAvailable" logica (fallback gedrag).
|
||||
- [x] Genereer `aidlc-docs/construction/core-base/functional-design/business-rules.md`.
|
||||
|
||||
## Stap 4: Data Flow & Error Handling
|
||||
- [x] Ontwerpen van de globale exception-to-response mapping.
|
||||
- [x] Beschrijven van de dataflow voor cross-cutting concerns (logging context).
|
||||
- [x] Genereer `aidlc-docs/construction/core-base/functional-design/business-logic-model.md`.
|
||||
|
||||
---
|
||||
|
||||
## Vragen voor Functional Design (Core Base)
|
||||
|
||||
### Vraag 1: Module Identificatie
|
||||
Welke metadata moet elke module verplicht opgeven bij registratie?
|
||||
A) Minimale set: Alleen een unieke `Name`.
|
||||
B) Uitgebreid: `Name`, `Version`, `Description` en `Dependencies` (lijst met namen van andere modules).
|
||||
C) Dynamisch: De module bepaalt zelf welke metadata hij exposeert via een dictionary.
|
||||
X) Anders: ...
|
||||
|
||||
[Answer]: B
|
||||
|
||||
### Vraag 2: Exception Handling Strategie
|
||||
Hoe moeten domein-specifieke exceptions (bijv. `ModuleNotFoundException`) functioneel worden vertaald naar de buitenwereld?
|
||||
A) Uniform: Alle exceptions mappen naar een generiek fout-object met een `Code` en `Message`.
|
||||
B) Gedetailleerd: Elke exception heeft een eigen response model met specifieke velden voor debug-informatie.
|
||||
X) Anders: ...
|
||||
|
||||
[Answer]: B
|
||||
|
||||
### Vraag 3: Availability Fallback
|
||||
Als een module de `IAvailabilityService` niet expliciet implementeert, wat moet het standaard gedrag van de Core Base zijn?
|
||||
A) Optimistisch: Altijd `true` retourneren (beschikbaar).
|
||||
B) Pessimistisch: `false` retourneren (niet beschikbaar totdat expliciet aangezet).
|
||||
C) Foutmelding: De applicatie mag niet starten als een module geen statuscontrole heeft.
|
||||
X) Anders: ...
|
||||
|
||||
[Answer]: X, de availability wordt voor de hele API gecontroleerd, niet per module
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# NFR Design Plan — Unit 01: Core Base
|
||||
|
||||
Dit plan beschrijft de stappen voor het technisch ontwerpen van de non-functional requirements voor Unit 01.
|
||||
|
||||
## NFR Design Stappen
|
||||
- [x] Ontwerpen van de `GlobalExceptionMiddleware` en de `ApiErrorResponse` mapping (SEC-01).
|
||||
- [x] Definiëren van de `IModule` interface en de dynamische discovery logica (PERF-01).
|
||||
- [x] Uitwerken van de `IAvailabilityService` decorator of middleware voor timeouts en fallback (AVAIL-01).
|
||||
- [x] Vastleggen van de AutoFixture configuratie patronen voor consistente testdata (MAINT-02).
|
||||
- [x] Controleren van de async-consistentie in alle voorgestelde interfaces (PERF-03).
|
||||
|
||||
## Vragen voor NFR Design (Unit 01)
|
||||
|
||||
1. **Exception Mapping**: Willen we gebruik maken van de nieuwe `IExceptionHandler` interface (geïntroduceerd in .NET 8) of de traditionele Middleware aanpak voor de globale foutafhandeling?
|
||||
2. **Module Discovery**: Voor de dynamische discovery: Gaan we uit van assembly scanning op basis van een naamconventie (bijv. `SlpModularCms.Modules.*`) of gebruiken we een specifiek attribuut (`[Module]`) op de entry classes?
|
||||
3. **Availability Timeout**: Moet de timeout voor `IAvailabilityService` globaal geconfigureerd worden via `appsettings.json`, of moet deze per call overschrijfbaar zijn via een `CancellationToken`?
|
||||
|
||||
## Volgende Stappen
|
||||
Na goedkeuring van dit plan (of beantwoording van de vragen), worden de technische ontwerpen gegenereerd in `aidlc-docs/construction/core-base/nfr-design/`.
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
# NFR Requirements Plan — Unit 01: Core Base
|
||||
|
||||
Dit plan beschrijft de stappen voor het vaststellen van de non-functional requirements (NFR) voor Unit 01 en bevat vragen voor de gebruiker om de technische keuzes te verfijnen.
|
||||
|
||||
## NFR Assessment Stappen
|
||||
- [x] Analyseren van de complexiteit van de module discovery en registration.
|
||||
- [x] Vaststellen van performance targets voor cross-cutting concerns (logging, exception handling).
|
||||
- [x] Definiëren van security constraints voor de API shell en module isolatie.
|
||||
- [x] Keuze van de tech stack componenten voor Unit 01.
|
||||
|
||||
## NFR Vragen voor Unit 01
|
||||
|
||||
### 1. Performance & Schaalbaarheid
|
||||
**Vraag 1.1**: Hoeveel modules verwacht je dat het systeem maximaal zal bevatten in de nabije toekomst?
|
||||
- A) Kleinschalig (1-5 modules)
|
||||
- B) Middelgroot (5-20 modules)
|
||||
- C) Grootschalig (20+ modules)
|
||||
- D) Dynamisch/Onbekend
|
||||
[Answer]: D
|
||||
|
||||
**Vraag 1.2**: Wat is de acceptabele overhead voor de globale exception handling middleware?
|
||||
- A) Minimaal ( < 10ms extra per request)
|
||||
- B) Gemiddeld (10-50ms)
|
||||
- C) Niet kritisch ( > 50ms)
|
||||
[Answer]: C
|
||||
|
||||
### 2. Security
|
||||
**Vraag 2.1**: Welke informatie mag ABSOLUUT NIET in de `Details` dictionary van de `ApiErrorResponse` verschijnen in productie?
|
||||
- A) Alleen stacktraces
|
||||
- B) Stacktraces en interne server IP-adressen/paden
|
||||
- C) Alles wat niet expliciet als 'veilig' is gemarkeerd (White-listing benadering)
|
||||
[Answer]: B
|
||||
|
||||
### 3. Availability & Reliability
|
||||
**Vraag 3.1**: Wat moet de timeout zijn voor de `IAvailabilityService.IsAvailableAsync()` check?
|
||||
- A) Zeer strikt ( < 500ms)
|
||||
- B) Standaard (1-2 seconden)
|
||||
- C) Relaxed ( > 2 seconden)
|
||||
[Answer]: B
|
||||
|
||||
### 4. Tech Stack Keuzes
|
||||
**Vraag 4.1**: Heb je een voorkeur voor een specifieke logging library?
|
||||
- A) Microsoft.Extensions.Logging (Standaard .NET)
|
||||
- B) Serilog (met Structured Logging focus)
|
||||
- C) NLog
|
||||
- D) Geen voorkeur
|
||||
[Answer]: D
|
||||
|
||||
**Vraag 4.2**: Hoe moeten we omgaan met Dependency Injection voor de modules?
|
||||
- A) Alleen de standaard .NET DI container
|
||||
- B) Een krachtigere container zoals Autofac (indien complexe module-overschrijvingen nodig zijn)
|
||||
[Answer]: A
|
||||
|
||||
**Vraag 4.3**: Voor de Unit Tests en Property-Based Testing (PBT), welke libraries wil je gebruiken? (Merk op: PBT is gedeeltelijk ingeschakeld)
|
||||
- A) xUnit + FluentAssertions + FsCheck (voor PBT)
|
||||
- B) xUnit + FluentAssertions + AutoFixture
|
||||
- C) xUnit + Shouldly
|
||||
[Answer]: B
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
# Code Generation Plan — Unit 02: Identity & RBAC
|
||||
|
||||
Dit plan beschrijft de stappen voor de implementatie van de Identity & RBAC module in `SlpModularCms.Core`.
|
||||
|
||||
## Implementatie Stappen
|
||||
|
||||
### 1. Voorbereiding
|
||||
- [x] Toevoegen van NuGet packages:
|
||||
- `Microsoft.AspNetCore.Identity.EntityFrameworkCore`
|
||||
- `Microsoft.EntityFrameworkCore.SqlServer`
|
||||
- `Microsoft.AspNetCore.Authentication.JwtBearer`
|
||||
|
||||
### 2. Domein Model
|
||||
- [x] Implementeren van `ApplicationUser` (erft van `IdentityUser<Guid>`).
|
||||
- [x] Implementeren van `ApplicationRole` (erft van `IdentityRole<Guid>`).
|
||||
- [x] Implementeren van `RefreshToken`, `Invitation`, en `ModulePermission` entiteiten.
|
||||
|
||||
### 3. Data Toegang
|
||||
- [x] Implementeren van `ApplicationDbContext` met de geconfigureerde tabelnamen (Users, Roles, etc.).
|
||||
|
||||
### 4. Services
|
||||
- [x] Implementeren van `IAuthService` voor login en token refresh.
|
||||
- [x] Implementeren van `IInvitationService` voor het uitnodigingsproces.
|
||||
|
||||
### 5. Autorisatie
|
||||
- [x] Implementeren van `HierarchicalRoleRequirement` en `HierarchicalRoleHandler`.
|
||||
|
||||
### 6. Testing
|
||||
- [x] Toevoegen van unit tests voor de Auth en Invitation services.
|
||||
- [x] Toevoegen van tests voor de hiërarchische autorisatie logica.
|
||||
|
||||
## Volgende Stappen
|
||||
Na de implementatie worden alle tests uitgevoerd om de correctheid te verifiëren.
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
# Functional Design Plan — Unit 02: Identity & RBAC
|
||||
|
||||
Dit plan beschrijft de stappen voor het functioneel ontwerpen van de Identity & Role-Based Access Control (RBAC) module (Unit 02).
|
||||
|
||||
## Functional Design Stappen
|
||||
- [x] Analyseren van de hiërarchische rollen logica (Eigenaar > Beheerder > Gebruiker).
|
||||
- [x] Ontwerpen van de gebruikersbeheer workflows (aanmaken, wijzigen, verwijderen).
|
||||
- [x] Definiëren van de JWT authenticatie flow (login, token refresh).
|
||||
- [x] Uitwerken van de autorisatie regels voor module-specifieke rechten.
|
||||
- [x] Opstellen van de domein entiteiten (User, Role, Token).
|
||||
|
||||
## Vragen voor Functional Design (Unit 02)
|
||||
|
||||
### 1. Initiële Gebruiker (Bootstrapping)
|
||||
**Vraag 1.1**: Hoe moet de allereerste "Eigenaar" (Owner) van het systeem worden aangemaakt?
|
||||
- A) Via een database seed script bij de eerste start.
|
||||
- B) Via een specifieke configuratie in `appsettings.json`.
|
||||
- C) Via een verborgen/tijdelijk endpoint dat na eerste gebruik wordt gedeactiveerd.
|
||||
|
||||
### 2. Gebruikersuitnodiging (FR-03)
|
||||
**Vraag 2.1**: Voor de creatie van nieuwe gebruikers: welke methode heeft de voorkeur voor de MVP?
|
||||
- A) **Direct**: Beheerder vult e-mail, rol én wachtwoord in. Account is direct actief.
|
||||
- B) **Uitnodiging**: Beheerder vult e-mail en rol in; systeem genereert een tijdelijk token/link waarmee de gebruiker zelf een wachtwoord instelt.
|
||||
|
||||
### 3. Hiërarchie Handhaving
|
||||
**Vraag 3.1**: Waar moet de hiërarchie-controle (bijv. Beheerder mag Eigenaar niet wijzigen) primair plaatsvinden?
|
||||
- A) **Service Layer**: In de `IUserService` wordt bij elke actie gecontroleerd of de uitvoerder voldoende rechten heeft t.o.v. de doelgebruiker.
|
||||
- B) **Authorization Policies**: Gebruikmaken van custom `RequirementHandlers` die de hiërarchie valideren voordat de controller actie wordt aangeroepen.
|
||||
|
||||
### 4. Refresh Tokens
|
||||
**Vraag 4.1**: Hoe moeten Refresh Tokens worden opgeslagen?
|
||||
- A) In de SQL database (gekoppeld aan de Gebruiker).
|
||||
- B) In-memory (alleen geschikt voor single-instance, gaat verloren bij restart).
|
||||
- C) Geen refresh tokens in de eerste versie van de MVP (alleen access tokens).
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts (`business-rules.md`, `logic-model.md`, `entities.md`) gegenereerd in `aidlc-docs/construction/identity-rbac/functional-design/`.
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
# NFR Design Plan — Unit 02: Identity & RBAC
|
||||
|
||||
Dit plan beschrijft de stappen voor het technisch ontwerpen van de non-functional requirements voor Unit 02.
|
||||
|
||||
## NFR Design Stappen
|
||||
- [x] Uitwerken van de `ApplicationDbContext` configuratie voor schone tabelnamen.
|
||||
- [x] Ontwerpen van de `HierarchicalRoleRequirement` en bijbehorende `Handler`.
|
||||
- [x] Definiëren van de `IAuthService` contracten voor JWT en Refresh Token management.
|
||||
- [x] Uitwerken van het beveiligingsmechanisme voor het eenmalige Setup endpoint.
|
||||
- [x] Vastleggen van de database schema voor de `RefreshToken` en `Invitation` entiteiten.
|
||||
|
||||
## Vragen voor NFR Design (Unit 02)
|
||||
|
||||
### 1. Setup Endpoint Beveiliging
|
||||
**Vraag 1.1**: Hoe moeten we garanderen dat het `POST /api/setup/init` endpoint echt maar één keer bruikbaar is?
|
||||
- A) **Database Check**: Controleer of er al een gebruiker met de rol `Owner` bestaat. Zo ja, retourneer 403 Forbidden.
|
||||
- B) **Feature Flag/Config**: Gebruik een vlag in de database `IsSystemInitialized`.
|
||||
- C) **File System**: Controleer op de aanwezigheid van een lock-file (minder geschikt voor cloud/docker).
|
||||
|
||||
### 2. JWT Signing
|
||||
**Vraag 2.1**: Waar moeten de JWT signing keys worden opgeslagen voor de MVP?
|
||||
- A) In `appsettings.json` (niet aanbevolen voor productie, maar eenvoudig voor dev).
|
||||
- B) In Environment Variables.
|
||||
- C) Gebruik van een lokaal gegenereerd certificaat/key file (voorbereiding op KeyVault).
|
||||
|
||||
### 3. Invitation Token
|
||||
**Vraag 3.1**: Wat voor soort token moeten we gebruiken voor de uitnodigingen?
|
||||
- A) Een cryptografisch veilige random string (bijv. 32 bytes Base64).
|
||||
- B) Een GUID.
|
||||
- C) Een kort JWT token (self-contained, maar vereist key management).
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de technische ontwerpen gegenereerd in `aidlc-docs/construction/identity-rbac/nfr-design/`.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# NFR Requirements Plan — Unit 02: Identity & RBAC
|
||||
|
||||
Dit plan beschrijft de stappen voor het vaststellen van de non-functional requirements (NFR) voor de Identity & RBAC module (Unit 02).
|
||||
|
||||
## NFR Assessment Stappen
|
||||
- [x] Vaststellen van de security baseline voor wachtwoordopslag en complexiteit.
|
||||
- [x] Definiëren van de token lifecycle (Access vs Refresh token duur).
|
||||
- [x] Bepalen van de audit-logging vereisten voor gevoelige acties (bijv. rolwijzigingen).
|
||||
- [x] Keuze van de database provider en ORM configuratie voor Identity.
|
||||
- [x] Performance overwegingen voor JWT validatie bij elk request.
|
||||
|
||||
## NFR Vragen voor Unit 02
|
||||
|
||||
### 1. Beveiliging & Wachtwoorden
|
||||
**Vraag 1.1**: Welke wachtwoord-complexiteit regels moeten we afdwingen?
|
||||
- A) **Standaard .NET Identity**: Minimaal 6 tekens, kleine letter, hoofdletter, cijfer en speciaal teken.
|
||||
- B) **Strikt**: Minimaal 12 tekens, verplichte variatie, geen bekende zwakke wachtwoorden.
|
||||
- C) **Eenvoudig**: Alleen minimale lengte (bijv. 8 tekens), geen complexiteitseisen.
|
||||
|
||||
### 2. Token Lifecycle
|
||||
**Vraag 2.1**: Wat moeten de standaard geldigheidsduren zijn voor de tokens?
|
||||
- A) **Standaard**: Access Token: 1 uur, Refresh Token: 7 dagen.
|
||||
- B) **Kort/Veilig**: Access Token: 15 minuten, Refresh Token: 24 uur.
|
||||
- C) **Lang**: Access Token: 12 uur, Refresh Token: 30 dagen.
|
||||
|
||||
### 3. Auditing
|
||||
**Vraag 3.1**: Welke acties moeten verplicht worden gelogd in een audit-trail (database)?
|
||||
- A) Alleen mislukte login pogingen.
|
||||
- B) Alle mutaties: Rolwijzigingen, gebruikerscreatie, en (de)activatie.
|
||||
- C) Alles inclusief succesvolle logins en token refreshes.
|
||||
|
||||
### 4. Database & ORM
|
||||
**Vraag 4.1**: Gaan we voor Identity gebruik maken van Entity Framework Core met SQL Server (conform NFR-01)?
|
||||
- A) Ja, gebruik de standaard `AspNetIdentity` tabellen in de SQL database.
|
||||
- B) Ja, maar met een aangepast schema/tabelnamen om de "AspNet" prefix te vermijden.
|
||||
|
||||
## Volgende Stappen
|
||||
Na beantwoording van deze vragen worden de artifacts (`nfr-requirements.md`, `tech-stack-decisions.md`) gegenereerd in `aidlc-docs/construction/identity-rbac/nfr-requirements/`.
|
||||
Reference in New Issue
Block a user