atualizacao
This commit is contained in:
@@ -2,36 +2,186 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\escolas;
|
||||
use App\Models\Escola;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
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()
|
||||
{
|
||||
|
||||
if (Auth::user()->id_escola == 0) {
|
||||
$escolas = escolas::all();
|
||||
} else {
|
||||
$escolas = escolas::where('id', Auth::user()->id_escola)->get();
|
||||
}
|
||||
$escolas = Escola::all();
|
||||
|
||||
return view('escolas.index', compact('escolas'));
|
||||
}
|
||||
|
||||
|
||||
public function createOrUpdate(Request $request)
|
||||
{
|
||||
try {
|
||||
escolas::updateOrCreate([
|
||||
'cnpj' => $request->cnpj,
|
||||
],[
|
||||
{
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$escola = Escola::updateOrCreate(
|
||||
['cnpj' => $request->cnpj],
|
||||
[
|
||||
'nome' => $request->razaosocial,
|
||||
'endereco' => json_decode($request->address, true),
|
||||
]);
|
||||
return redirect()->route('escolas')->with('success', 'Escola Criada|Atualizada com sucesso');
|
||||
} catch (\Throwable $th) {
|
||||
dd($th);
|
||||
]
|
||||
);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user