Files
database-pertani-web/app/Http/Middleware/BatasiAksesPetani.php
T

46 lines
1.2 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Enums\Role;
use App\Models\Pertanian\Petani;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Dipasang di semua route modul data petani (petani/{petani}/...).
* - Hanya role pengelola data petani yang boleh masuk.
* - Koordinator hanya boleh mengakses petani dengan komoditas utama yang ditugaskan.
*/
class BatasiAksesPetani
{
private const ROLE_DIIZINKAN = [
Role::SUPER_ADMIN,
Role::ADMIN,
Role::KOORDINATOR,
Role::ENUMERATOR,
];
public function handle(Request $request, Closure $next): Response
{
$user = $request->user();
abort_unless($user && in_array($user->role, self::ROLE_DIIZINKAN, true), 403);
$petani = $request->route('petani');
if ($petani !== null && $user->isKoordinator()) {
$petani = $petani instanceof Petani ? $petani : Petani::find($petani);
abort_unless(
$petani && $user->bolehAksesPetani($petani),
403,
'Petani ini bukan bagian dari komoditas yang Anda koordinasikan.'
);
}
return $next($request);
}
}