middleware('auth'); } public function impersonate(Request $request, $id): RedirectResponse { Gate::authorize('impersonate'); $impersonator = $request->user(); $id = (int) $id; $target = User::findOrFail($id); if ($target->id === $request->user()->id) { return back()->with('error', 'Tidak boleh impersonate diri sendiri.'); } if (method_exists($target, 'canBeImpersonated') && !$target->canBeImpersonated()) { return back()->with('error', 'Akaun ini tidak boleh di-impersonate.'); } $request->user()->impersonate($target); return redirect()->route('home'); } public function leave(Request $request): RedirectResponse { if ($request->user() && method_exists($request->user(), 'isImpersonated') && $request->user()->isImpersonated()) { $impersonated = $request->user(); $impersonator = method_exists($impersonated, 'impersonator') ? $impersonated->impersonator() : null; $request->user()->leaveImpersonation(); } return redirect()->route('home'); } }