Tenant Features: Tutorial Operativo¶
Questa guida spiega come gestire fix/feature mirate per tenant dal pannello admin.
Obiettivo¶
- abilitare/disabilitare comportamento per tenant specifico;
- fare rollout graduale;
- introdurre fix temporanei senza toccare tutti i tenant.
Dove si configura¶
Impostazioni Avanzate -> Tenant Features- view tecnica:
TenantFeatureFlagView - tabella:
tenant_feature_flag
Cosa fa il menu¶
Impostazioni Avanzate -> Tenant Features¶
Apre la gestione delle feature flag e fix flag per tenant, con rollout puntuale e override mirati.
Campi principali¶
tenant_key: tenant target. usa*per default globale.feature_code: codice univoco (es.feature.compila.photo_v2).enabled: on/off.status:active,trial,readonly,disabled,expired.valid_from,valid_to: finestra temporale.config_json: parametri opzionali in JSON.notes: motivazione/business note.
Convenzione codici¶
- feature:
feature.<modulo>.<nome> - fix:
fix.<modulo>.<nome> - esempio:
feature.documentale.versioning_v2fix.compila.reload_server_after_resetfeature.ras.extrabit_zip_export
Pattern consigliato di rollout¶
- crea record
*conenabled=false(default globale spento). - crea record per tenant pilota con
enabled=true. - valida su pilota.
- estendi ad altri tenant.
- quando stabile: abilita
*e rimuovi override specifici.
Uso nel codice¶
Import base:
from app.modules.multitenancy.features import (
is_feature_enabled,
get_feature_config,
tenant_feature_required,
)
Guard semplice:
if is_feature_enabled("feature.compila.photo_v2"):
# nuovo comportamento
else:
# fallback legacy
Config dinamica:
cfg = get_feature_config("feature.compila.photo_v2")
max_photos = int(cfg.get("max_photos", 3))
Protezione endpoint:
@expose("/api/new-endpoint")
@has_access
@tenant_feature_required("feature.compila.photo_v2")
def new_endpoint(self):
...
Per endpoint write-only:
@tenant_feature_required("feature.documentale.fast_upload", allow_readonly=False)
Esempi config_json¶
{"max_photos": 4, "layout": "compact"}
{"enabled_actions": ["preview", "download"], "default_page_size": 50}
Relazione con Tenant Modules¶
Tenant Modules: abilita/disabilita macro-moduli (commerciale, ras, tickets, ecc.).Tenant Features: dettaglio fine su singole feature/fix dentro un modulo.
Caso consigliato per formazione:
module_code = formazione- feature flag dedicate per rollout del portale esterno o sync avanzati
Usa entrambi: - modulo spento => feature non rilevanti; - modulo acceso => feature/fix governano il comportamento puntuale.
Checklist rapida¶
- definisci
feature_codecon naming standard. - inserisci record in
Tenant Features. - aggiungi guard nel codice.
- testa tenant pilota.
- monitora log/errori.
- estendi rollout.
Comandi utili (CLI)¶
Seed iniziale flag standard:
flask feature_flag_seed_defaults
Set puntuale di una feature:
flask feature_flag_set \
--tenant-key tenant_besant \
--feature-code feature.anagrafiche.tenant_access \
--enabled \
--status active
Disabilitazione rapida:
flask feature_flag_set \
--tenant-key tenant_besant \
--feature-code feature.anagrafiche.tenant_access \
--disabled \
--status disabled
Abilitare export ZIP Extrabit solo su un tenant:
flask feature_flag_set \
--tenant-key tenant_safecondo \
--feature-code feature.ras.extrabit_zip_export \
--enabled \
--status active