Files
cae/app/Http/Controllers/EscolasController.php
2026-02-22 18:16:47 +00:00

188 lines
5.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Escola;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;
class EscolasController extends Controller
{
public function index()
{
$escolas = Escola::all();
return view('escolas.index', compact('escolas'));
}
public function createOrUpdate(Request $request)
{
DB::beginTransaction();
try {
$escola = Escola::updateOrCreate(
['cnpj' => $request->cnpj],
[
'nome' => $request->razaosocial,
'endereco' => json_decode($request->address, true),
]
);
if ($escola->wasRecentlyCreated) {
// 🔥 Limpa cache ANTES
app(PermissionRegistrar::class)->forgetCachedPermissions();
// Define tenant (team)
setPermissionsTeamId($escola->id);
/*
|--------------------------------------------------------------------------
| ROLES (POR ESCOLA)
|--------------------------------------------------------------------------
*/
$roles = [
'coordenacao',
'secretaria',
'responsavel',
'aluno',
'representante_de_turma',
];
foreach ($roles as $r) {
Role::firstOrCreate([
'name' => $r,
'guard_name' => 'web',
'id_escola' => $escola->id,
]);
}
/*
|--------------------------------------------------------------------------
| PERMISSIONS
|--------------------------------------------------------------------------
*/
$permissions = [
// escolas
'escolas.ver',
'escolas.criar',
'escolas.editar',
'escolas.deletar',
// turmas
'turmas.ver',
'turmas.detalhes',
'turmas.criar',
'turmas.editar',
'turmas.deletar',
// alunos
'alunos.ver_todos',
'alunos.ver_meus',
'alunos.criar',
'alunos.editar',
'alunos.deletar',
// whatsapp
'wpp.enviar',
];
foreach ($permissions as $p) {
Permission::firstOrCreate([
'name' => $p,
'guard_name' => 'web',
]);
}
/*
|--------------------------------------------------------------------------
| MAPEAR ROLE -> PERMISSIONS (CORRIGIDO)
|--------------------------------------------------------------------------
*/
$rolePermissions = [
// Coordenação: vê todos os alunos
'coordenacao' => [
'turmas.ver',
'turmas.detalhes',
'turmas.criar',
'turmas.editar',
'turmas.deletar',
'alunos.ver_todos',
'alunos.criar',
'alunos.editar',
'alunos.deletar',
'wpp.enviar',
],
// Secretaria: vê todos os alunos
'secretaria' => [
'turmas.ver',
'turmas.detalhes',
'alunos.ver_todos',
'alunos.criar',
'alunos.editar',
'wpp.enviar',
],
// Responsável: vê somente os "meus"
'responsavel' => [
'alunos.ver_meus',
],
// Aluno: vê somente os "meus"
'aluno' => [
'alunos.ver_meus',
],
// Representante: vê os "meus" + detalhes da turma (e wpp se você quiser)
'representante_de_turma' => [
'alunos.ver_meus',
'turmas.detalhes',
'wpp.enviar',
],
];
foreach ($rolePermissions as $roleName => $perms) {
$role = Role::query()
->where('name', $roleName)
->where('guard_name', 'web')
->where('id_escola', $escola->id)
->firstOrFail();
$role->syncPermissions($perms);
}
// 🔥 Limpa cache DEPOIS
app(PermissionRegistrar::class)->forgetCachedPermissions();
// opcional: volta contexto global
setPermissionsTeamId(null);
}
DB::commit();
return redirect()
->route('escolas')
->with('success', 'Escola Criada|Atualizada com sucesso');
} catch (\Throwable $th) {
DB::rollBack();
throw $th;
}
}
}