/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $current = \Route::current(); $prefix = $current->getPrefix(); if ($prefix == "broadcaster/services") { if (\Request::is('broadcaster/services/news*')) { $model = "news"; } else { if (\Request::is('broadcaster/services/channel*')) { $model = "channel"; } else { if (\Request::is('broadcaster/services/vod*')) { $model = "vod"; } else { return $next($request); } } } if ($model) { if (!$this->broadcasterResource->hasService($model)) { return response(['error' => ['description' => 'No service available']], 401); } } $params = $current->parameters(); if ($params) { if ($this->broadcasterResource->canAccess($model, $params)) { return $next($request); } else { return response(['error' => ['code' => 'UNAUTHORIZED', 'description' => 'You are not authorized to access this resource.']], 401); } } } return $next($request); }
public function handle($request, Closure $next, $guard = null) { \App::setLocale(config('gtcmslang.defaultAdminLocale')); $showLoginMessage = true; if (config('gtcms.adminAutoLogin') && \Auth::guest()) { $user = User::where('role', 'admin')->first(); \Auth::login($user); $showLoginMessage = false; } $allowedUserRoles = config('gtcms.allowedUserRoles'); if (\Auth::guest() || !in_array(\Auth::user()->role, $allowedUserRoles)) { if (\Route::current()->uri() != "admin/login") { if (\Request::ajax() && \Request::get('getIgnore_isAjax')) { $data = array('success' => false, 'message' => "Session timeout", 'redirectToLogin' => true); return \Response::json($data); } else { return \Redirect::to('/admin/login'); } } } else { if (\Route::current()->uri() == "admin/login") { if ($showLoginMessage) { MessageManager::setError(trans('gtcms.alreadyLoggedIn')); } return \Redirect::to("/admin"); } } if (\Session::get('accessDenied')) { if (\Route::currentRouteName() != "restricted") { \Session::put('accessDenied', true); return \Redirect::to('/access-denied'); } } else { if (\Route::currentRouteName() == "restricted") { MessageManager::setError(trans('gtcms.accessGranted')); \Session::put('accessDenied', false); return \Redirect::to("/admin"); } } return $next($request); }
/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $authorized = false; // Default to protect all routes. $errorCode = 0; // Default to something bogus... $method = null; $path = null; $actionName = null; $user = null; $username = null; $guest = false; // Get current route from Laravel. $laravelRoute = LaravelRoute::current(); // If not set we will fallback to error HTTP 500. This should never occur. TODO: remove this check... if (isset($laravelRoute)) { // Get route info. $method = $laravelRoute->getMethods()[0]; $path = $laravelRoute->getPath(); $actionName = $laravelRoute->getActionName(); // Get current user or set guest to true for unauthenticated users. if ($this->auth->check()) { $user = $this->auth->user(); $username = $user->username; } elseif ($this->auth->guest()) { $guest = true; } // AuthController and PasswordController are exempt from authorization. // TODO: Get list of controllers exempt from config. if (str_contains($actionName, 'AuthController@') || str_contains($actionName, 'PasswordController@')) { $authorized = true; } elseif (!$guest && isset($user) && 'root' == $user->username) { $authorized = true; } elseif (!$guest && isset($user) && $user->hasRole('admins')) { $authorized = true; } else { // if ($user->enabled) // { // Get application route based on info from Laravel route. $appRoute = AppRoute::ofMethod($method)->ofActionName($actionName)->ofPath($path)->enabled()->with('permission')->first(); // If found, proceed with authorization if (isset($appRoute)) { // Permission set for route. if (isset($appRoute->permission)) { // Route is open to all. // TODO: Get 'open-to-all' role name from config, and replace all occurrences. if ('open-to-all' == $appRoute->permission->name) { $authorized = true; } elseif ($guest && 'guest-only' == $appRoute->permission->name) { $authorized = true; } elseif (!$guest && isset($user) && $user->enabled && 'basic-authenticated' == $appRoute->permission->name) { $authorized = true; } elseif (!$guest && isset($user) && $user->enabled && $user->can($appRoute->permission->name)) { $authorized = true; } else { Log::error("Authorization denied for request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "], guest [" . $guest . "], username [" . $username . "]."); $errorCode = 403; } } else { Log::error("No permission set for the requested route, path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "], guest [" . $guest . "], username [" . $username . "]."); $errorCode = 403; } } else { Log::error("No application route found in AuthorizeRoute module for request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "]."); $errorCode = 403; } // if ( isset($appRoute) ) // } // else // { // return redirect( route('logout') ); // } } } // If authorize, proceed if ($authorized) { return $next($request); // Else if error code was set abort with that. } elseif (0 != $errorCode) { if (!$guest && isset($user) && !$user->enabled) { Log::error("User [" . $user->username . "] disabled, forcing logout."); return redirect(route('logout')); } else { abort($errorCode); } // Lastly Fallback to error HTTP 500: Internal server error. We should not get to this! } else { Log::error("Server error while trying to authorize route, request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "]."); abort(500); } }