Pular para conteúdo

Multi-Tenancy

Estratégia: Shared Database, Shared Schema

Todas as escolas compartilham o mesmo banco e schema. O isolamento é garantido por:

  1. FK school_id em cursos, agentes e matrículas
  2. FK student_id em sessões de chat
  3. Filtros obrigatórios em todas as queries das views
  4. Mixins de permissãoAdminRequiredMixin, StudentRequiredMixin

Regras de Isolamento

  • Admin só vê/edita dados da sua própria escola
  • Aluno só acessa agentes de cursos onde tem matrícula ativa
  • Um aluno pode pertencer a múltiplas escolas simultaneamente
  • Nenhuma query retorna dados cross-tenant sem filtro explícito

Mixins

# schools/mixins.py
class AdminRequiredMixin:
    def get_school(self):
        # Retorna sempre a escola do usuário autenticado
        return self.request.user.school

Exemplo de Query Segura

# Sempre filtrar pela escola do usuário — nunca pelo ID passado na URL
courses = Course.objects.filter(school=self.get_school())