belongsToMany( Escola::class, 'user_escolas', 'user_id', 'escola_id' ); } public function escolaAtual() { return $this->belongsTo( Escola::class, 'current_escola_id' ); } /** * Alunos pelos quais este usuário é responsável (N:N via pivot) */ public function alunosComoResponsavel() { return $this->belongsToMany( Aluno::class, 'aluno_responsaveis', 'user_id', 'aluno_id' )->withTimestamps(); } /** * Se você quiser acessar o "aluno" do próprio usuário (portal do aluno), * dá pra ter 1:1 (um usuário pode ser o aluno). */ public function aluno() { return $this->hasOne(Aluno::class, 'user_id'); } /* |-------------------------------------------------------------------------- | SUPER ADMIN |-------------------------------------------------------------------------- */ public function isSuperAdmin(): bool { return (bool) $this->is_super_admin; } /* |-------------------------------------------------------------------------- | FUNÇÃO / CARGO DO USUÁRIO (ROLE) |-------------------------------------------------------------------------- */ public function funcao(): ?string { if ($this->isSuperAdmin()) { return 'Super Admin'; } if (!$this->current_escola_id) { return null; } setPermissionsTeamId($this->current_escola_id); $role = $this->roles()->value('name'); if (!$role) { return null; } $map = [ 'coordenacao' => 'Coordenação', 'secretaria' => 'Secretaria', 'responsavel' => 'Responsável', 'aluno' => 'Aluno', 'representante_de_turma' => 'Representante de Turma', 'super_admin' => 'Super Admin', ]; return $map[$role] ?? ucfirst(str_replace('_', ' ', $role)); } public function hasFuncao(string $funcao): bool { if ($funcao === 'super_admin') { return $this->isSuperAdmin(); } if (!$this->current_escola_id) { return false; } setPermissionsTeamId($this->current_escola_id); return $this->hasRole($funcao); } }