# Routing ## Frontend routing Frontend routing verloopt via `cms/router.php` (PHP dev server) of `.htaccess` (Apache). Beide zorgen voor clean URLs. ### PHP dev server Start de server met: ```bash php -S localhost:8080 cms/router.php ``` `cms/router.php` serveert: - Schone URLs: `/nl/pagina` → `public/index.php?page=pagina&lang=nl` - `themes/` assets - `admin/assets/` assets - `plugins/` assets ### Apache (live server) `public/.htaccess` herschrijft URLs naar `public/index.php`. Asset URLs (`/themes/`, `/admin/assets/`, `/plugins/`) worden doorgestuurd naar `public/asset.php`. `public/asset.php` serveert bestanden vanuit de juiste mappen met het juiste MIME-type: - `/themes//assets/...` → `themes//assets/...` - `/admin/assets/...` → `admin/theme/default/assets/...` - `/plugins//assets/...` → `plugins//assets/...` ## Admin routing Admin routing verloopt via `public/admin.php` met clean URLs: ``` /admin/dashboard → ?route=dashboard /admin/content → ?route=content /admin/plugins → ?route=plugins ``` `cms/router.php` of `.htaccess` zet `/admin/` om naar `?route=`. ### Route access control (RBAC) Elke route wordt gecontroleerd via `AdminAuth::hasPermission($route)`: - `admin` rol heeft wildcard `*` toegang - Andere rollen hebben een expliciete lijst van toegestane routes in `ROLE_PERMISSIONS` - Onbevoegde routes geven een **403 error** ## Plugin admin routing Systeem plugins kunnen admin routes registreren. Deze worden afgehandeld door `PluginManager::handleAdminRoute($route)`: 1. Systeem plugin registreert routes via `getAdminRoutes()` 2. `PluginManager::getAdminMenuItems()` verzamelt admin menu items via `getAdminMenu()` 3. Bij een admin request zoekt `PluginManager::handleAdminRoute($route)` een plugin die de route afhandelt 4. De plugin methode `handleAdminRoute($route)` rendert de pagina inhoud ```php // PluginManager roept deze aan voor /admin/mijn-systeem $plugin->handleAdminRoute('mijn-systeem'); ```