============================ Configuration (Settings) ============================ Toute la configuration multi-tenant est centralisée dans le dictionnaire ``MULTITENANT`` de ``settings.py``. Les valeurs par défaut sont définies dans ``src.share_kernel.settings``. Module : ``src.share_kernel.settings`` .. module:: src.share_kernel.settings :synopsis: Configuration par défaut et accès aux paramètres .. function:: get_setting(name: str) -> object Récupère un paramètre multi-tenant, avec fallback sur la valeur par défaut. :param name: Nom du paramètre (ex: ``"ISOLATION_BACKEND"``) :returns: La valeur configurée ou la valeur par défaut Référence complète ================== .. list-table:: Paramètres d'isolation :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``ISOLATION_BACKEND`` - ``"schema"`` - Backend d'isolation : ``"schema"``, ``"rls"``, ``"shared_fk"`` * - ``SHARED_SCHEMA_NAME`` - ``"public"`` - Nom du schéma partagé PostgreSQL * - ``TENANT_SCHEMA_PREFIX`` - ``"tenant_"`` - Préfixe des schémas tenant * - ``SCHEMA_NAME_REGEX`` - ``"^[a-z]..."`` - Regex de validation des noms de schéma * - ``RESERVED_SCHEMA_NAMES`` - ``[...]`` - Noms de schéma réservés * - ``TENANT_STATEMENT_TIMEOUT_MS`` - ``30000`` - Timeout SQL par tenant (protection noisy neighbor) .. list-table:: Paramètres de résolution tenant :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``TENANT_HEADER`` - ``"X-Tenant-ID"`` - Header HTTP pour l'identification du tenant * - ``TENANT_JWT_CLAIM`` - ``"tenant_id"`` - Claim JWT contenant le tenant ID * - ``TENANT_RESOLUTION_ORDER`` - ``["jwt", "header"]`` - Ordre de résolution (JWT d'abord, puis header) .. list-table:: Paramètres ABAC :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``ABAC_ENABLED`` - ``True`` - Active/désactive l'évaluation ABAC * - ``ABAC_DEFAULT_EFFECT`` - ``"deny"`` - Effet par défaut si aucune politique ne matche * - ``ABAC_CONDITION_ENGINE`` - ``"json"`` - Moteur de conditions : ``"json"``, ``"cedar"``, ``"casbin"`` * - ``ABAC_CACHE_POLICIES`` - ``True`` - Mise en cache des politiques * - ``ABAC_POLICY_CACHE_TTL`` - ``300`` - TTL du cache des politiques (secondes) * - ``ABAC_MAX_CONDITION_DEPTH`` - ``10`` - Profondeur maximale d'imbrication des conditions * - ``ABAC_MAX_CONDITIONS_PER_POLICY`` - ``50`` - Nombre max de conditions par politique * - ``ABAC_REGEX_TIMEOUT_MS`` - ``100`` - Timeout pour les regex dans les conditions .. list-table:: Paramètres d'approbation :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``APPROVAL_ENABLED`` - ``True`` - Active/désactive les workflows d'approbation * - ``APPROVAL_DEFAULT_EXPIRATION_HOURS`` - ``72`` - Expiration par défaut des demandes (heures) * - ``APPROVAL_DEFAULT_REQUIRED_APPROVALS`` - ``1`` - Nombre d'approbations requises par défaut * - ``APPROVAL_AUTO_EXECUTE_DEFAULT`` - ``True`` - Exécution automatique après approbation .. list-table:: Paramètres OTP / 2FA :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``OTP_ENABLED`` - ``False`` - Active/désactive le 2FA * - ``OTP_EMAIL_ENABLED`` - ``True`` - Active le canal OTP par email * - ``OTP_TOTP_ENABLED`` - ``True`` - Active le canal TOTP * - ``OTP_STATIC_ENABLED`` - ``True`` - Active les codes de récupération * - ``OTP_EMAIL_TOKEN_VALIDITY_SECONDS`` - ``300`` - Validité des codes email (secondes) * - ``OTP_TOTP_ISSUER_NAME`` - ``"django-multitenant"`` - Nom de l'émetteur TOTP (affiché dans l'app) * - ``OTP_STATIC_TOKEN_COUNT`` - ``10`` - Nombre de codes de récupération générés * - ``OTP_REQUIRED_FOR_LOGIN`` - ``False`` - OTP obligatoire pour le login .. list-table:: Paramètres divers :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``ASYNC_BACKEND`` - ``"auto"`` - Backend async : ``"celery"``, ``"sync"``, ``"auto"`` * - ``JWT_INCLUDE_TENANT_CLAIMS`` - ``True`` - Inclure les claims tenant dans le JWT * - ``INVITATION_ENABLED`` - ``True`` - Active/désactive les invitations * - ``INVITATION_EXPIRATION_HOURS`` - ``168`` - Expiration des invitations (7 jours) * - ``EMAIL_VERIFICATION_ENABLED`` - ``False`` - Active/désactive la vérification email Internationalisation (django-parler) ===================================== La traduction des modèles est gérée par **django-parler**. Voir :doc:`translations` pour le guide complet. .. code-block:: python LANGUAGES = [ ('en', 'English'), ('fr', 'Français'), ('ar', 'العربية'), ] PARLER_LANGUAGES = { None: ( {'code': 'en'}, {'code': 'fr'}, {'code': 'ar'}, ), 'default': { 'fallbacks': ['en'], 'hide_untranslated': False, }, } .. list-table:: Paramètres PARLER_LANGUAGES :header-rows: 1 :widths: 35 15 50 * - Paramètre - Défaut - Description * - ``fallbacks`` - ``['en']`` - Langues de repli si la traduction n'existe pas * - ``hide_untranslated`` - ``False`` - Masquer les objets sans traduction dans la langue active