Files
Deathgarden_Rebirth-Rewrite/dist/app/Http/Middleware/AdminPermissionCheck.php
Vari a0e2e321cc Created a middleware for checking permissions in admin controllers, so I cannot forget to add permission checks.
Changed some descriptions of the admin tools for Miraak.

Aded some more Permissions and added a moderator role.
2024-08-11 16:34:59 +02:00

44 lines
1.4 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Attributes\IgnorePermissionCheck;
use App\Enums\Auth\Permissions;
use App\Http\Controllers\Web\Admin\Tools\AdminToolController;
use Auth;
use Closure;
use Illuminate\Http\Request;
use phpDocumentor\Reflection\Types\ClassString;
use ReflectionClass;
use Route;
use Symfony\Component\HttpFoundation\Response;
class AdminPermissionCheck
{
/**
* Check Permissions automatically if we are in a Admin Tool Controller.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
/** @var ClassString<AdminToolController> $currentControllerClass */
$currentControllerClass = Route::getCurrentRoute()->getControllerClass();
if(!class_exists($currentControllerClass) || !is_subclass_of($currentControllerClass, AdminToolController::class))
return $next($request);
$currentMethod = Route::getCurrentRoute()->getActionMethod();
$reflector = new ReflectionClass($currentControllerClass);
// Skip permission check if the attribute exists on this function
if(count($reflector->getMethod($currentMethod)->getAttributes(IgnorePermissionCheck::class)) > 0)
return $next($request);
if(!Auth::user()->can($currentControllerClass::getNeededPermission()))
abort(403);
return $next($request);
}
}