You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
878B

  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Codes\UserRole;
  4. use App\Sessions\SessionUser;
  5. use Closure;
  6. use Illuminate\Http\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class RoleMiddleware
  9. {
  10. public function __construct(private SessionUser $sessionUser)
  11. {
  12. }
  13. /**
  14. * Handle an incoming request.
  15. *
  16. * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
  17. */
  18. public function handle(Request $request, Closure $next, string $rolesStr): Response
  19. {
  20. $allowRoles = [];
  21. foreach (explode(",", $rolesStr) as $roleSrt) {
  22. $role = UserRole::from($roleSrt);
  23. $allowRoles[] = $role;
  24. }
  25. if (in_array($this->sessionUser->user()->role, $allowRoles, true) === false) {
  26. abort(403);
  27. }
  28. return $next($request);
  29. }
  30. }