loggedIn()) { return redirect()->to('login'); } $result = true; foreach ($params as $permission) { // does permission is specific to a podcast? if (str_contains($permission, '#')) { $router = Services::router(); $routerParams = $router->params(); // get podcast id $podcastId = null; if (is_numeric($routerParams[0])) { $podcastId = (int) $routerParams[0]; } else { $podcast = (new PodcastModel())->getPodcastByHandle($routerParams[0]); if ($podcast instanceof Podcast) { $podcastId = $podcast->id; } } if ($podcastId !== null) { $permission = str_replace('#', '#' . $podcastId, $permission); } } $result = $result && auth() ->user() ->can($permission); } if (! $result) { throw new RuntimeException(lang('Auth.notEnoughPrivilege'), 403); } } //-------------------------------------------------------------------- /** * 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 string[]|null $arguments */ public function after(RequestInterface $request, ResponseInterface $response, $arguments = null): void { } //-------------------------------------------------------------------- }