Initial commit with inital CMS
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
# Application Design — SlpModularCms.Api
|
||||
|
||||
Dit document consolideert het volledige applicatie-ontwerp voor de modulaire CMS API.
|
||||
|
||||
## 1. Architectuur Overzicht
|
||||
De applicatie volgt een modulaire Clean Architecture structuur waarbij het **Core Framework** de centrale spil is. Modules zijn onafhankelijke projecten (.csproj) of DLL's die via een hybride laad-strategie worden geïntegreerd.
|
||||
|
||||
- **Kleurgecodeerd Diagram**:
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "Core Phase"
|
||||
Core[Core Framework]
|
||||
ID[Identity Subsysteem]
|
||||
end
|
||||
|
||||
subgraph "Module Phase"
|
||||
Avail[Availability Module]
|
||||
Other[External Modules]
|
||||
end
|
||||
|
||||
Shell[API Shell]
|
||||
|
||||
Shell --> Core
|
||||
Shell --> Avail
|
||||
Shell -.-> Other
|
||||
|
||||
Avail --> Core
|
||||
Other -.-> Core
|
||||
|
||||
style Core fill:#BBDEFB,stroke:#1565C0,color:#000
|
||||
style ID fill:#E3F2FD,stroke:#1565C0,color:#000
|
||||
style Shell fill:#C8E6C9,stroke:#2E7D32,color:#000
|
||||
style Avail fill:#FFF59D,stroke:#F57F17,color:#000
|
||||
```
|
||||
|
||||
## 2. Belangrijkste Componenten
|
||||
Zie de gedetailleerde beschrijvingen in [components.md](./components.md).
|
||||
|
||||
- **Core**: Gedeelde logica, Identity en interfaces.
|
||||
- **Availability Module**: MVP placeholder voor statuscontrole.
|
||||
- **API Shell**: Host en orchestrator.
|
||||
|
||||
## 3. Interfaces & Services
|
||||
Zie [component-methods.md](./component-methods.md) en [services.md](./services.md).
|
||||
|
||||
- **IModule**: Het contract voor module-integratie.
|
||||
- **IAuthService / IUserService**: Beheer van identiteit en hiërarchische RBAC.
|
||||
- **IAvailabilityService**: Controleert of de API of specifieke modules operationeel zijn.
|
||||
|
||||
## 4. Ontwerpbeslissingen (Besloten in Plan)
|
||||
1. **Hybride Module Loading**: Core modules worden statisch geladen voor performance en type-safety; optionele modules kunnen dynamisch worden toegevoegd.
|
||||
2. **Identity in Core**: Voor de MVP is Identity een integraal onderdeel van het framework om complexe autorisatie-hiërarchieën (Owner > Admin > User) eenvoudiger te borgen.
|
||||
3. **Eenvoudige Projectstructuur**: Per module wordt één project gebruikt om de complexiteit laag te houden, met interne folders voor separation of concerns.
|
||||
4. **Policy-Based RBAC**: Gebruik van standaard ASP.NET Core `AuthorizationPolicy` voor het afdwingen van de rol-hiërarchie.
|
||||
|
||||
## 5. Volgende Stappen
|
||||
Op basis van dit ontwerp wordt de applicatie opgesplitst in **Units of Work** in de volgende fase (Units Generation).
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
# Component Dependencies — SlpModularCms.Api
|
||||
|
||||
Dit document beschrijft de relaties en communicatiepatronen tussen de componenten.
|
||||
|
||||
## 1. Dependency Diagram
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
API[Web API Shell] --> Core[Core Framework / Identity]
|
||||
API --> Avail[Availability Module]
|
||||
Avail --> Core
|
||||
|
||||
subgraph "External Modules (Optional)"
|
||||
Mod[External Module DLL] -.-> Core
|
||||
end
|
||||
|
||||
API -.-> Mod
|
||||
```
|
||||
|
||||
### Tekstuele Toelichting:
|
||||
- **Core Framework**: Is de centrale afhankelijkheid. Alle modules refereren naar de Core voor interfaces en Identity modellen. De Core mag zelf NOOIT refereren naar een module (Dependency Inversion).
|
||||
- **Web API Shell**: Heeft een harde referentie naar de Core en de Availability Module (voor de MVP stub).
|
||||
- **Modules**: Implementeren interfaces uit de Core. Worden door de API Shell geladen en geregistreerd in de DI container.
|
||||
|
||||
## 2. Communicatiepatronen
|
||||
|
||||
- **In-Process DI**: Alle communicatie tussen modules en het framework verloopt via de Dependency Injection container van ASP.NET Core.
|
||||
- **Shared Domain Models**: Modules gebruiken de gedeelde `User` en `Role` modellen uit de Core voor autorisatie-checks.
|
||||
- **Events (Toekomstig)**: Gebruik van een `IMediator` of intern event-systeem voor ontkoppelde communicatie tussen modules.
|
||||
|
||||
## 3. Data Flow
|
||||
|
||||
1. **Client Request**: Komt binnen bij de API Shell.
|
||||
2. **Availability Check**: Middleware roept `IAvailabilityService` (Availability Module) aan.
|
||||
3. **Authentication**: Middleware valideert JWT via Identity logica (Core).
|
||||
4. **Authorization**: Policy-based checks valideren de rol-hiërarchie (Core).
|
||||
5. **Execution**: Het request wordt afgehandeld door de relevante Module Controller.
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
# Component Methods — SlpModularCms.Api
|
||||
|
||||
Dit document specificeert de belangrijkste methoden en interfaces per component.
|
||||
|
||||
## 1. IModule Interface (Core)
|
||||
Alle modules moeten deze interface implementeren om geregistreerd te kunnen worden.
|
||||
|
||||
- `void RegisterServices(IServiceCollection services)`
|
||||
- Registreert module-specifieke services in de DI container.
|
||||
- `void ConfigureMiddleware(IApplicationBuilder app)`
|
||||
- Configureert module-specifieke middleware (optioneel).
|
||||
|
||||
## 2. IAvailabilityService (Core Interface, Availability Implementatie)
|
||||
Interface voor de beschikbaarheidscontrole.
|
||||
|
||||
- `Task<bool> IsAvailableAsync()`
|
||||
- Retourneert of het systeem/module beschikbaar is.
|
||||
- `Task<AvailabilityDetails> GetDetailsAsync()`
|
||||
- Geeft gedetailleerde statusinformatie terug (toekomstig).
|
||||
|
||||
## 3. IAuthService (Identity - Core)
|
||||
Afhandeling van authenticatie.
|
||||
|
||||
- `Task<AuthResult> LoginAsync(LoginRequest request)`
|
||||
- Valideert credentials en geeft tokens terug.
|
||||
- `Task<AuthResult> RefreshTokenAsync(RefreshRequest request)`
|
||||
- Vernieuwt een sessie met een refresh token.
|
||||
|
||||
## 4. IUserService (Identity - Core)
|
||||
Beheer van gebruikers accounts.
|
||||
|
||||
- `Task<UserDto> CreateUserAsync(CreateUserRequest request)`
|
||||
- Maakt een nieuwe gebruiker aan (alleen voor Admin/Owner).
|
||||
- `Task<IEnumerable<UserDto>> GetAllUsersAsync()`
|
||||
- Lijst met alle gebruikers (alleen voor Admin/Owner).
|
||||
- `Task UpdateUserRoleAsync(Guid userId, string newRole)`
|
||||
- Wijzigt een rol (met hiërarchische validatie).
|
||||
- `Task DeleteUserAsync(Guid userId)`
|
||||
- Verwijdert een gebruiker (voorkomt verwijdering Owner).
|
||||
- `Task SetModulePermissionAsync(Guid userId, string moduleName, bool hasAccess)`
|
||||
- Kent module-specifieke rechten toe aan een gebruiker.
|
||||
|
||||
## 5. Authorization Handlers (Identity - Core)
|
||||
Technisch mechanisme voor RBAC.
|
||||
|
||||
- `HandleRequirementAsync(AuthorizationHandlerContext context, HierarchyRequirement requirement)`
|
||||
- Valideert of de gebruiker de vereiste rol heeft op basis van de hiërarchie (Owner > Admin > User).
|
||||
@@ -0,0 +1,40 @@
|
||||
# Components — SlpModularCms.Api
|
||||
|
||||
Dit document beschrijft de belangrijkste functionele componenten van de CMS API en hun verantwoordelijkheden.
|
||||
|
||||
## 1. Core Framework (SlpModularCms.Core)
|
||||
Het fundament van de applicatie. Bevat de gedeelde logica, interfaces en infrastructuur-configuratie.
|
||||
|
||||
- **Verantwoordelijkheden**:
|
||||
- Definiëren van basis-interfaces (`IModule`, `IAvailabilityService`).
|
||||
- Cross-cutting concerns (logging, exception handling, validatie).
|
||||
- Infrastructuur abstracties (Unit of Work, Repository interfaces).
|
||||
- Bevat de **Identity** kernfunctionaliteit (Gebruikers, Rollen, JWT).
|
||||
|
||||
## 2. Availability Module (SlpModularCms.Modules.Availability)
|
||||
Een specifieke module voor de beschikbaarheidscontrole.
|
||||
|
||||
- **Verantwoordelijkheden**:
|
||||
- Implementatie van `IAvailabilityService`.
|
||||
- Stub-functionaliteit voor de MVP (retourneert altijd "beschikbaar").
|
||||
- Toekomstige integratie met de Master-API.
|
||||
|
||||
## 3. Web API Shell (SlpModularCms.Api)
|
||||
De host-applicatie (ASP.NET Core Web API).
|
||||
|
||||
- **Verantwoordelijkheden**:
|
||||
- Dependency Injection registratie van de Core en statisch gekoppelde modules.
|
||||
- Dynamisch laden van optionele modules via Assembly loading (Hybride strategie).
|
||||
- Hosting van Swagger/OpenAPI documentatie.
|
||||
- Middleware configuratie (Auth, HTTPS, CORS).
|
||||
- Routeerlaag naar module-controllers.
|
||||
|
||||
## 4. Identity Component (Binnen Core)
|
||||
Hoewel onderdeel van de Core, fungeert dit als een onderscheidbaar subsysteem.
|
||||
|
||||
- **Verantwoordelijkheden**:
|
||||
- Inloggen en JWT generatie.
|
||||
- Refresh token beheer.
|
||||
- CRUD operaties op Gebruikers.
|
||||
- Beheer van module-specifieke permissies voor Gebruikers.
|
||||
- Hiërarchische RBAC handhaving via Authorization Policies.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Services — SlpModularCms.Api
|
||||
|
||||
Dit document beschrijft de service-laag en de orkestratie van componenten.
|
||||
|
||||
## 1. Module Orchestrator (Binnen API Shell)
|
||||
Verantwoordelijk voor het ontdekken en laden van modules bij het opstarten.
|
||||
|
||||
- **Proces**:
|
||||
1. Identificeer statisch gerefereerde projecten die `IModule` implementeren.
|
||||
2. Scan de geconfigureerde "Modules" directory voor DLL's (dynamisch laden).
|
||||
3. Roep `RegisterServices` aan op alle gevonden module-instanties.
|
||||
4. Voeg de controllers van de modules toe aan de MVC-pipeline via `AddApplicationPart`.
|
||||
|
||||
## 2. Identity Service Orchestratie
|
||||
De `IAuthService` maakt gebruik van ASP.NET Core Identity onder water om authenticatie te regelen.
|
||||
|
||||
- **Workflow Login**:
|
||||
- `AuthService` roept `UserManager` aan voor validatie.
|
||||
- Bij succes genereert `TokenService` een JWT met claims (ID, Rol).
|
||||
- Refresh token wordt opgeslagen in de database.
|
||||
|
||||
## 3. Availability Check Flow
|
||||
Cross-cutting concern dat door de hele applicatie heen loopt.
|
||||
|
||||
- **Interceptors/Middleware**:
|
||||
- Elk inkomend request kan worden gecontroleerd tegen de `IAvailabilityService`.
|
||||
- Als `IAvailabilityService.IsAvailableAsync()` false retourneert, stopt de pipeline met een `503 Service Unavailable`.
|
||||
|
||||
## 4. RBAC Policy Orchestratie
|
||||
Het framework configureert globale policies op basis van de rollenhiërarchie.
|
||||
|
||||
- **Policies**:
|
||||
- `RequireOwnerRole`: Vereist expliciet de Owner claim.
|
||||
- `RequireAdminRole`: Vereist Admin OF Owner claim.
|
||||
- `RequireUserRole`: Vereist User, Admin OF Owner claim.
|
||||
|
||||
## 5. Module-Specifieke Autorisatie
|
||||
Naast de globale rollen kunnen Beheerders en Eigenaars rechten per module toekennen aan Gebruikers.
|
||||
|
||||
- **Mechanisme**:
|
||||
- Het systeem houdt een koppeling bij tussen `User` en `Module` met bijbehorende permissies (bijv. `HasAccess`).
|
||||
- **Custom Requirement**: Er wordt een `ModuleAccessRequirement` gedefinieerd die controleert of de huidige gebruiker expliciete toegang heeft tot de module die hij probeert te benaderen.
|
||||
- **Override**: Eigenaars en Beheerders hebben standaard toegang tot alle modules (hiërarchie bypass).
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# Unit of Work Dependency Matrix — SlpModularCms.Api
|
||||
|
||||
Dit document beschrijft de afhankelijkheden tussen de Units of Work.
|
||||
|
||||
## Dependency Matrix
|
||||
|
||||
| Unit | Afhankelijk van | Type | Reden |
|
||||
|---|---|---|---|
|
||||
| **U01: Core Base** | - | - | Fundament zonder externe afhankelijkheden binnen de solution. |
|
||||
| **U02: Identity** | U01 | Hard | Gebruikt interfaces en modellen uit Core Base. |
|
||||
| **U03: Availability** | U01 | Hard | Implementeert `IAvailabilityService` uit Core Base. |
|
||||
| **U04: API Shell** | U01, U02, U03 | Hard / Soft | Host alle componenten; orkestreert Identity en Modules. |
|
||||
|
||||
## Visualisatie
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
U04[U04: API Shell] --> U01[U01: Core Base]
|
||||
U04 --> U02[U02: Identity]
|
||||
U04 --> U03[U03: Availability]
|
||||
|
||||
U02 --> U01
|
||||
U03 --> U01
|
||||
|
||||
style U01 fill:#BBDEFB,stroke:#1565C0,color:#000
|
||||
style U02 fill:#E3F2FD,stroke:#1565C0,color:#000
|
||||
style U03 fill:#FFF59D,stroke:#F57F17,color:#000
|
||||
style U04 fill:#C8E6C9,stroke:#2E7D32,color:#000
|
||||
```
|
||||
|
||||
## Update Strategie
|
||||
We volgen de natuurlijke hiërarchie:
|
||||
1. **U01** moet volledig functioneel zijn (interfaces) voordat we aan U02/U03 kunnen beginnen.
|
||||
2. **U02** en **U03** kunnen in theorie parallel ontwikkeld worden, maar we kiezen voor sequentieel (eerst Identity).
|
||||
3. **U04** integreert alles en wordt als laatste voltooid.
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
# Unit of Work Story Map — SlpModularCms.Api
|
||||
|
||||
Dit document mapt de User Stories naar de specifieke Units of Work voor de implementatie. Vanwege de 'Split Story' strategie worden sommige stories over meerdere units verdeeld (bijv. Interface in U01, Implementatie in U02/U03).
|
||||
|
||||
## Story Mapping
|
||||
|
||||
| Story ID | Titel | Primary Unit | Secundaire Unit(s) |
|
||||
|---|---|---|---|
|
||||
| **Authenticatie** | | | |
|
||||
| US-AUTH-01 | JWT Authenticatie | **U02** | U01 (Interfaces), U04 (Middleware) |
|
||||
| US-AUTH-02 | Inloggen via API | **U02** | U04 (Endpoint) |
|
||||
| US-AUTH-03 | Token vervaltijd | **U02** | |
|
||||
| US-AUTH-04 | Refresh tokens | **U02** | |
|
||||
| **Gebruikersbeheer** | | | |
|
||||
| US-USER-01 | Gebruiker aanmaken | **U02** | U04 (Endpoint) |
|
||||
| US-USER-02 | Gebruikerslijst raadplegen | **U02** | U04 (Endpoint) |
|
||||
| US-USER-03 | Gebruiker bijwerken | **U02** | U04 (Endpoint) |
|
||||
| US-USER-04 | Gebruiker verwijderen | **U02** | U04 (Endpoint) |
|
||||
| US-USER-05 | Geen zelfregistratie | **U02** | U04 (Logic) |
|
||||
| **Autorisatie** | | | |
|
||||
| US-AUTHZ-01 | Role-Based Access Control | **U02** | U04 (Policy Config) |
|
||||
| US-AUTHZ-02 | Eigenaarschap overdragen | **U02** | |
|
||||
| US-AUTHZ-03 | Hiërarchische bevoegdheden | **U02** | |
|
||||
| **Setup** | | | |
|
||||
| US-SETUP-01 | Eerste Eigenaar seeden | **U02** | |
|
||||
| US-SETUP-02 | Setup endpoint | **U04** | U02 (Identity logic) |
|
||||
| **Modules** | | | |
|
||||
| US-MOD-01 | Module laden bij applicatiestart | **U04** | U01 (Interfaces) |
|
||||
| US-MOD-02 | Module uitschakelen | **U04** | U01 (Logic) |
|
||||
| US-MOD-03 | Module-specifieke rechten | **U02** | U04 (Enforcement) |
|
||||
| **Beschikbaarheid** | | | |
|
||||
| US-AVAIL-01 | Beschikbaarheid controleren | **U03** | U01 (Interface), U04 (Middleware) |
|
||||
|
||||
## Samenvatting per Unit
|
||||
- **U01 (Core Base)**: Legt de fundamenten voor US-MOD-01, US-AVAIL-01 en US-AUTH-01 (Interfaces).
|
||||
- **U02 (Identity)**: Bevat de hoofdbuik van de logica voor Authenticatie, Gebruikersbeheer en Autorisatie.
|
||||
- **U03 (Availability)**: Specifieke implementatie voor US-AVAIL-01.
|
||||
- **U04 (API Shell)**: De integratie-laag voor alle stories, specifiek de setup (US-SETUP-02) en module loading (US-MOD-01).
|
||||
@@ -0,0 +1,25 @@
|
||||
# Unit of Work — SlpModularCms.Api
|
||||
|
||||
Dit document beschrijft de decompositie van de API in ontwikkel-eenheden (Units of Work).
|
||||
|
||||
## Overzicht van Units
|
||||
|
||||
| Unit ID | Naam | Beschrijving | Belangrijkste Componenten |
|
||||
|---|---|---|---|
|
||||
| **U01** | **Core Base** | Het fundament: interfaces, cross-cutting concerns en basis framework logica. | `IModule`, `IAvailabilityService`, Exceptions, Logging setup. |
|
||||
| **U02** | **Identity & RBAC** | Het identiteitssysteem: Gebruikers, Rollen, JWT en de hiërarchische autorisatie logica. | `UserManager`, `RoleManager`, `IAuthService`, `IUserService`, Authorization Handlers. |
|
||||
| **U03** | **Availability Module** | De implementatie van de beschikbaarheidscontrole (stub). | `StubAvailabilityService`, `AvailabilityController`. |
|
||||
| **U04** | **API Shell & Integration** | De host applicatie die alles samenbrengt en modules laadt. | `Program.cs`, `ModuleOrchestrator`, Middleware, Swagger. |
|
||||
|
||||
## Greenfield Code Organisatie Strategie
|
||||
|
||||
We gebruiken een **Just-in-Time** project creatie strategie. De projecten worden aangemaakt wanneer de betreffende Unit aan de beurt is.
|
||||
|
||||
### Mappenstructuur (Verwacht)
|
||||
- `src/SlpModularCms.Core/` (U01 & U02)
|
||||
- `src/SlpModularCms.Modules.Availability/` (U03)
|
||||
- `src/SlpModularCms.Api/` (U04 - Reeds aanwezig als scaffolding)
|
||||
|
||||
### Project Type
|
||||
- Class Libraries voor Core en Modules.
|
||||
- ASP.NET Core Web API voor de Shell.
|
||||
Reference in New Issue
Block a user