Multi-Tenancy¶
Estratégia: Shared Database, Shared Schema¶
Todas as escolas compartilham o mesmo banco e schema. O isolamento é garantido por:
- FK
school_idem cursos, agentes e matrículas - FK
student_idem sessões de chat - Filtros obrigatórios em todas as queries das views
- Mixins de permissão —
AdminRequiredMixin,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