context = $context; $this->member_repository = $member_repository; $this->endpoint_repository = $endpoint_repository; } /** * @param $request * @param Closure $next * @param $required_groups * @return \Illuminate\Http\JsonResponse|mixed */ public function handle($request, Closure $next) { $current_member = $this->context->getCurrentUser(); if (is_null($current_member)) return $next($request); $method = $request->getMethod(); $route = RequestUtils::getCurrentRoutePath($request); $endpoint = $this->endpoint_repository->getApiEndpointByUrlAndMethod($route, $method); if(is_null($endpoint)) return $next($request); if(!$endpoint instanceof ApiEndpoint) return $next($request); $required_groups = $endpoint->getAuthzGroups(); foreach ($required_groups as $required_group) { Log::debug(sprintf("UserAuthEndpoint::handle route %s method %s member %s (%s) required group %s", $route, $method, $current_member->getId(), $current_member->getEmail(), $required_group->getSlug())); if($current_member->isOnGroup($required_group->getSlug())) return $next($request); } $http_response = Response::json(['error' => 'unauthorized member'], 403); return $http_response; } }