Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Django Session & Multi Tenant

Django Session & Multi Tenant

Come sfruttare le potenzialità della session auth di Django in un progetto Multi Tenant

Matteo Vitali

June 06, 2022
Tweet

Other Decks in Programming

Transcript

  1. Come sfruttare le potenzialità della session auth di Django in

    un progetto multi tenant Matteo Vitali
  2. Matteo Vitali Python Django backend developer Sociologo di formazione con

    una smodata passione per l'informatica. Utente Gnu/Linux per scelta e sostenitore del software libero e open source. In 20tab ricopro la posizione di backend developer e sviluppare in Python e Django è quello che prediligo. 20tab.com
  3. Agenda 1 2 3 Multi Tenant e Django session auth

    Use case (esempi di codice) Conclusioni
  4. Multi tenant La “letteratura” sull’argomento multi tenant è abbastanza varia

    a approfondita e come del resto lo sono anche i metodi e gli approcci alla gestione a tenant multipli.
  5. “Con il termine Multi tenant ci si riferisce ad una

    architettura software in cui una sua singola istanza è eseguita da un server ed è fruita da diverse organizzazioni che, ciascuna con le sue peculiarità ambientali, costituiscono concettualmente uno specifico tenant”. Fonte: https://it.wikipedia.org/wiki/Multi-tenant Multi tenant # Definizione
  6. Multi tenant # Definizione, metodi e approcci “Le applicazioni multi-tenant

    consentono di servire più clienti con un'unica installazione dell'applicazione. Ogni cliente (tenant) ha i propri dati completamente isolati in tale architettura”. • Database condiviso e schema condivisi • Database condiviso e schema isolati • Database isolato e schema isolati • Tenant completamente isolati Fonte: https://books.agiliq.com/projects/django-multi-tenant/en/latest/index.html
  7. Use case # Gestionale ad uso scolastico Percorsi Competenze Trasversali

    e Orientamento (PCTO) • Ogni Scuola (“Dominio” del progetto) ha una grafica personalizzata (logo e paletta dei colori) • Ogni utente può assumere più profili/ruoli: switch user profile (Studente <> Tutor <> Insegnante <> Scuola <> Genitore)
  8. None
  9. Use case Tecnologie e framework utilizzati • Django • Django

    Rest Framework (API RESTful) • ReactJS • PostgreSQL (database condiviso e schema condivisi) ogni risorsa presente a database ha una relazione diretta o indiretta con il tenant.
  10. Django - How to use sessions # Documentazione Django https://docs.djangoproject.com/en/4.0/topics/http/sessions/

  11. Django - How to use sessions # Definizioni Il session

    framework di Django consente di archiviare e recuperare dati del visitatore del sito. Memorizza i dati server side e astrae l'invio e la ricezione di cookie, i quali contengono un ID di sessione. Il cookie della sessione di autenticazione memorizzato nel browser, per impostazione predefinita, è denominato sessionid. Volendo, lo si può modificare impostando il SESSION_COOKIE_NAME
  12. Django - How to use sessions Esaminando l’header della request

    di un utente autenticato in Django, vedremo qualcosa di simile: { 'Cookie': 'sessionid=g9eflhxbeih1lgmslnybt5dn21zgk28t'; csrftoken=D3DtmfPKxriKMoy70eYikf8pUEVMTy3bDTczk8Ni0BNFVArAWg9oGat5V8PfKQW1 } L'utente che effettua questo tipo di richiesta, per Django, risulterà autenticato. Fonte: https://www.valentinog.com/blog/django-session-graphql/
  13. Come configurare la session auth in Django

  14. # project/settings.py The project settings.py

  15. # project/settings.py The project settings.py

  16. Modelli Multi Tenant

  17. # tenants/models.py The Tenant abstract Model

  18. # users/models.py A custom User Model

  19. # users/models.py A Profile Model

  20. Come settare la session multi tenant

  21. # tenants/utils.py set_tenant_session()

  22. Views e Serializers Multi Tenant

  23. # tenants/views.py LoginView(APIView)

  24. # tenants/serializers.py TenantHiddenField

  25. # tenants/serializers.py Tenant serializers

  26. # tenants/views.py CurrentTenantItemsMixin

  27. # users/views.py UserViewSet() e ProfileViewSet()

  28. Conclusioni 1 2 Ottimo lavoro di squadra Tanta esperienza #

    Cosa ci portiamo a casa (e non) 3 4 Sicurezza (?) Django admin multi tenant
  29. matteo@20tab.com Thank you /trottomv /matteovitali @trotto 20tab.com