check()) { session()->set('redirect_url', current_url()); return redirect('login'); } helper('misc'); $authorize = Services::authorization(); $router = Services::router(); $routerParams = $router->params(); $result = false; // Check if user has at least one of the permissions foreach ($params as $permission) { // check if permission is for a specific podcast if ( (startsWith($permission, 'podcast-') || startsWith($permission, 'podcast_episodes-')) && count($routerParams) > 0 ) { if ( $groupId = (new PodcastModel())->getContributorGroupId( $authenticate->id(), $routerParams[0] ) ) { if ($authorize->groupHasPermission($permission, $groupId)) { $result = true; break; } } } elseif ( $authorize->hasPermission($permission, $authenticate->id()) ) { $result = true; break; } } if (!$result) { if ($authenticate->silent()) { $redirectURL = session('redirect_url') ?? '/'; unset($_SESSION['redirect_url']); return redirect() ->to($redirectURL) ->with('error', lang('Auth.notEnoughPrivilege')); } else { throw new PermissionException(lang('Auth.notEnoughPrivilege')); } } } //-------------------------------------------------------------------- /** * Allows After filters to inspect and modify the response * object as needed. This method does not allow any way * to stop execution of other after filters, short of * throwing an Exception or Error. * * @param \CodeIgniter\HTTP\RequestInterface $request * @param \CodeIgniter\HTTP\ResponseInterface $response * @param array|null $arguments * * @return void */ public function after( RequestInterface $request, ResponseInterface $response, $arguments = null ) { } //-------------------------------------------------------------------- }