# Modul-Integration in das *risks* Projekt Dieses Dokument beschreibt, wie weitere Apps (z. B. **ToDo**) in dein ISO-27001 Risk-Management Projekt (App heißt `risks`) integriert werden. Alle Apps im Bestand sind/werden nach demselben Muster aufgebaut und registrieren sich selbst in der Navigation, wenn sie installiert sind und vorhandene Permissions passen. --- ## Schritte zur Einbindung einer neuen App ### 1. Submodul hinzufügen Füge das gewünschte App-Repo als Git-Submodul hinzu: ```bash git submodule add ``` Beispiel für ToDo-App: ```bash git submodule add https://skulldev.de/Skull-IT/todo-app.git todo ``` > Wichtig: Der Zielpfad sollte dem App-Namen entsprechen (`todo` etc). --- ### 2. App in `INSTALLED_APPS` aktivieren In deinem Projekt unter `config/settings.py` oder dem entsprechenden Settings-Modul: ```python INSTALLED_APPS = [ # bestehende Apps "risks", "todo", # neu hinzugefügte App # … weitere ] ``` Damit registriert Django Models, Migrations, Templates & static files der App. --- ### 3. URLs einbinden In deiner zentralen `urls.py` (unter `config/` oder wo dein Root URLs definiert sind) muss die neue App eingebunden werden: ```python from django.urls import include, path urlpatterns = [ # … path("todo/", include("todo.urls", namespace="todo")), ] ``` Damit werden die Views der App über `/todo/` erreichbar. --- ### 4. Navigation (automatisch) #### Registry-Ansatz * In `risks` existiert eine Navigation-Registry. * Jede App registriert sich selbst in dieser Registry mit Label, URL-Name, und erforderlicher Permission. * `risks` rendert automatisch alle registrierten Navigationseinträge im Menü, sofern installiert + Benutzer berechtigt. #### Beispiel: Registrierung in der neuen App (`apps.py`) ```python from django.apps import AppConfig class TodoConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "todo" def ready(self): try: from risks.navigation_registry import register register( label="ToDo", url_name="todo:list", # Name, wie in todo.urls permission="todo.view_task", # Permission nötig ) except ImportError: # risks App ist nicht installiert → nichts machen pass ``` #### Verhalten * Ist die App **nicht installiert** → kein Menüpunkt * Ist sie **installiert, aber User hat keine entsprechende Permission** → kein Menüpunkt * Ist sie **installiert und hat User die Permission** → Menüpunkt erscheint automatisch --- ### 5. Base-Template-Vererbung * Läuft die neue App **allein** (Standalone/Demo) → sie liefert ein eigenes `base.html`. * Wenn sie im `risks` Projekt eingebunden ist → sie erbt das `base.html` aus `risks`. Dies funktioniert über die Reihenfolge in `INSTALLED_APPS` oder über ein optionales Setting wie z. B. `TODO_BASE_TEMPLATE`, welches gesetzt werden kann, wenn `risks` das Base vorgibt. --- ### 6. Migration & Datenbankstruktur Nach Einbindung: ```bash python manage.py migrate ``` Stelle sicher, dass Migrationen der neuen App mitlaufen und keine Konflikte bestehen. --- ### 7. Permissions setzen Die neue App definiert eigene Permissions via `Meta` in `models` oder explizit via Migration. Beispiele: * `todo.view_task` → um den Menüpunkt und Zugriffe zu erlauben * Weitere wie `todo.add_task`, `todo.change_task`, `todo.delete_task` Rechte können über Django Admin oder Migration vergeben werden. --- ### 8. Tests ausführen Sicherheitshalber: ```bash python manage.py test todo ``` So siehst du, ob die App sauber arbeitet und integriert ist. --- ### 9. Checkliste * [ ] Submodul hinzugefügt * [ ] App in `INSTALLED_APPS` eingetragen * [ ] URL-Einbindung in Root URLs umgesetzt * [ ] Neue App registriert sich in der Navigation via Registry * [ ] Migrationen ausgeführt * [ ] Permissions gesetzt * [ ] Navigation erscheint/dem User sichtbar, wo nötig