vendor and env first commit

This commit is contained in:
2025-03-28 08:52:46 +01:00
parent f8388bc81b
commit 8f26283832
10976 changed files with 1349952 additions and 2 deletions
@@ -0,0 +1,81 @@
<?php
namespace Lab404\Impersonate\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Lab404\Impersonate\Services\ImpersonateManager;
class ImpersonateController extends Controller
{
/** @var ImpersonateManager */
protected $manager;
/**
* ImpersonateController constructor.
*/
public function __construct()
{
$this->manager = app()->make(ImpersonateManager::class);
$guard = $this->manager->getDefaultSessionGuard();
$this->middleware('auth:' . $guard)->only('take');
}
/**
* @param int $id
* @param string|null $guardName
* @return RedirectResponse
* @throws \Exception
*/
public function take(Request $request, $id, $guardName = null)
{
$guardName = $guardName ?? $this->manager->getDefaultSessionGuard();
// Cannot impersonate yourself
if ($id == $request->user()->getAuthIdentifier() && ($this->manager->getCurrentAuthGuardName() == $guardName)) {
abort(403);
}
// Cannot impersonate again if you're already impersonate a user
if ($this->manager->isImpersonating()) {
abort(403);
}
if (!$request->user()->canImpersonate()) {
abort(403);
}
$userToImpersonate = $this->manager->findUserById($id, $guardName);
if ($userToImpersonate->canBeImpersonated()) {
if ($this->manager->take($request->user(), $userToImpersonate, $guardName)) {
$takeRedirect = $this->manager->getTakeRedirectTo();
if ($takeRedirect !== 'back') {
return redirect()->to($takeRedirect);
}
}
}
return redirect()->back();
}
/**
* @return RedirectResponse
*/
public function leave()
{
if (!$this->manager->isImpersonating()) {
abort(403);
}
$this->manager->leave();
$leaveRedirect = $this->manager->getLeaveRedirectTo();
if ($leaveRedirect !== 'back') {
return redirect()->to($leaveRedirect);
}
return redirect()->back();
}
}