RejectIfSsoOnlyAndNotForAdmin.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Facades\Settings;
  4. use App\Models\User;
  5. use Closure;
  6. use Illuminate\Http\Response;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Log;
  9. class RejectIfSsoOnlyAndNotForAdmin
  10. {
  11. /**
  12. * Reject the request when it aims to modify or impact a user account in those 2 conditions:
  13. * - The impacted account does not have the Administrator role
  14. * - Authentication is restricted to SSO only
  15. *
  16. * @param \Illuminate\Http\Request $request
  17. * @return mixed
  18. */
  19. public function handle($request, Closure $next)
  20. {
  21. if (Settings::get('useSsoOnly')) {
  22. if ($email = $request->input('email', null)) {
  23. $user = User::whereEmail($email)->first();
  24. } else {
  25. $user = Auth::user();
  26. }
  27. if ($user?->isAdministrator()) {
  28. return $next($request);
  29. }
  30. Log::notice(sprintf('Request to %s rejected, only Admins can request it while authentication is restricted to SSO only', $request->getPathInfo()));
  31. return response()->json(['message' => __('errors.unsupported_with_sso_only')], Response::HTTP_METHOD_NOT_ALLOWED);
  32. }
  33. return $next($request);
  34. }
  35. }