Initial commit device-management
tests / ci (push) Has been cancelled

This commit is contained in:
Wian Drs
2026-08-25 09:42:00 +07:00
commit 1e80be180e
1159 changed files with 149545 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class EnsureActiveUser
{
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->user() && ! $request->user()->is_active) {
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('login')->withErrors(['email' => 'Akun Anda sedang dinonaktifkan.']);
}
return $next($request);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\View;
use Symfony\Component\HttpFoundation\Response;
class HandleAppearance
{
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
View::share('appearance', $request->cookie('appearance') ?? 'system');
return $next($request);
}
}
@@ -0,0 +1,51 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Inertia\Middleware;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
public function share(Request $request): array
{
return [
...parent::share($request),
'name' => config('app.name'),
'auth' => [
'user' => $request->user(),
'permissions' => fn () => $request->user()?->getAllPermissions()->pluck('name')->values() ?? [],
],
'flash' => [
'success' => fn () => $request->session()->get('success'),
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
];
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Http\Middleware;
use App\Models\Tenant;
use App\Support\TenantContext;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class SelectAdministrationTenant
{
public function __construct(private readonly TenantContext $context) {}
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$tenant = $request->route('tenant');
abort_unless($tenant instanceof Tenant, 404);
$user = $request->user();
abort_unless($user?->is_platform_admin || $user?->tenant_id === $tenant->id, 403);
$previousTenantId = $this->context->id();
$this->context->set($tenant->id);
setPermissionsTeamId($tenant->id);
try {
return $next($request);
} finally {
$this->context->set($previousTenantId);
setPermissionsTeamId($previousTenantId);
}
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Middleware;
use App\Support\TenantContext;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class SetTenantContext
{
public function __construct(private readonly TenantContext $context) {}
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$user = $request->user();
$requestedTenantId = $request->header('X-Tenant-ID');
if ($user?->is_platform_admin && $requestedTenantId !== null) {
abort_unless($user->can('tenant.access-any'), 403);
$this->context->set((int) $requestedTenantId);
} else {
$this->context->set($user?->tenant_id);
}
setPermissionsTeamId($this->context->id());
try {
return $next($request);
} finally {
$this->context->clear();
setPermissionsTeamId(null);
}
}
}