big update base struktur tahap 1
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class EnsureAccessLevel
|
||||
{
|
||||
public function handle(Request $request, Closure $next, string ...$levels): Response
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
if (! $user || (! $user->isMasterAdmin() && ! in_array($user->access_level->value, $levels, true))) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'code' => 403,
|
||||
'message' => 'Anda tidak memiliki level akses yang diperlukan.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Services\Access\AccessService;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class EnsureMenuPermission
|
||||
{
|
||||
public function __construct(
|
||||
protected AccessService $access
|
||||
) {}
|
||||
|
||||
public function handle(Request $request, Closure $next, string $menuSlug, string $permission): Response
|
||||
{
|
||||
$user = $request->user();
|
||||
$tenantId = $request->attributes->get('tenant_id');
|
||||
|
||||
if (! $user || ! $this->access->hasMenuPermission($user, $menuSlug, $permission, $tenantId)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'code' => 403,
|
||||
'message' => 'Anda tidak memiliki permission untuk tindakan ini.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class EnsureMenuResourcePermission
|
||||
{
|
||||
public function handle(Request $request, Closure $next, string $menuSlug): Response
|
||||
{
|
||||
$permission = match ($request->method()) {
|
||||
'GET', 'HEAD' => 'view',
|
||||
'POST' => 'create',
|
||||
'PUT', 'PATCH' => 'update',
|
||||
'DELETE' => 'delete',
|
||||
default => null,
|
||||
};
|
||||
|
||||
if (! $permission) {
|
||||
abort(405);
|
||||
}
|
||||
|
||||
return app(EnsureMenuPermission::class)
|
||||
->handle($request, $next, $menuSlug, $permission);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Services\Access\AccessService;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class ResolveTenantContext
|
||||
{
|
||||
public function __construct(
|
||||
protected AccessService $access
|
||||
) {}
|
||||
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$user = $request->user();
|
||||
$requested = $request->header('X-Tenant-ID');
|
||||
$requestedTenantId = is_numeric($requested) ? (int) $requested : null;
|
||||
$tenantId = $this->access->tenantId($user, $requestedTenantId);
|
||||
|
||||
if ($requestedTenantId && ! $tenantId) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'code' => 403,
|
||||
'message' => 'User tidak memiliki akses ke tenant yang dipilih.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
$request->attributes->set('tenant_id', $tenantId);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user