netgescon-master/netgescon-laravel/app/Providers/AuthServiceProvider.php

68 lines
2.3 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use App\Models\User;
use App\Models\Stabile;
use App\Models\VoceSpesa;
use App\Models\RipartizioneSpese;
use App\Models\PianoRateizzazione;
use App\Models\Rata;
use App\Policies\StabilePolicy;
use App\Policies\VoceSpesaPolicy;
use App\Policies\RipartizioneSpesaPolicy;
use App\Policies\PianoRateizzazionePolicy;
use App\Policies\RataPolicy;
class AuthServiceProvider extends ServiceProvider
{
/**
* The model to policy mappings for the application.
* @var array<class-string, class-string>
*/
protected $policies = [
Stabile::class => StabilePolicy::class,
VoceSpesa::class => VoceSpesaPolicy::class,
RipartizioneSpese::class => RipartizioneSpesaPolicy::class,
PianoRateizzazione::class => PianoRateizzazionePolicy::class,
Rata::class => RataPolicy::class,
];
/**
* Register any authentication / authorization services.
*/
public function boot(): void
{
// Gate per accesso pannello super-admin
Gate::define('access-super-admin-panel', function (User $user) {
return $user->hasRole('super-admin');
});
// Gate per accesso pannello admin (Amministratore di Condominio)
Gate::define('access-admin-panel', function (User $user) {
// L'utente deve avere il ruolo 'amministratore' ED essere collegato a un record 'amministratori'
return $user->hasRole('amministratore') && $user->amministratore()->exists();
});
// Gate per accesso pannello condomino
Gate::define('access-condomino-panel', function (User $user) {
return $user->hasRole('condomino');
});
// Gate per l'impersonificazione
Gate::define('impersonate', function (User $user) {
// Solo i super-admin possono impersonare
return $user->hasRole('super-admin');
});
// Gate per verificare se un utente può essere impersonato
Gate::define('canBeImpersonated', function (User $user, User $targetUser) {
// Un super-admin non può essere impersonato da nessuno
return !$targetUser->hasRole('super-admin');
});
}
}