Перенаправить пользователя на определенную страницу, если он получает доступ к конференции с идентификатором, который не существует - PullRequest
0 голосов
/ 29 июня 2018

У меня есть этот маршрут:

Route::get('conference/admin/{id}', 
[ 'uses' => 'ConferenceController@admin', 
'as'=>'conference.admin']);

Таким образом, когда пользователь получает доступ к http://proj.test/conference/manage/1", он получает доступ к домашней странице страницы административной области конференции.

Но если эта конкретная конференция удаляется, если пользователь выходит "http://proj.test/conference/admin/1", появляется страница с таким сообщением:

Извините, страница, которую вы ищете, не найдена.

Но, если конференция не существует и пользователь подключается "http://proj.test/conference/admin/1", что должно произойти, если пользователь будет перенаправлен на домашнюю страницу ('/').

Вы знаете, как этого добиться?

У меня уже есть в AuthServiceProvider приведенный ниже код, чтобы позволить только пользователю, который является создателем конференции, иметь доступ к административной области этой конференции. Я не знаю, можно ли это использовать также для перенаправления пользователя в ('/'), если он получает доступ к конференции, которая не существует.

// Ворота поставщика услуг аутентификации

 public function boot(GateContract $gate)
    {
        $this->registerPolicies();

        $gate->define('access-management-area', function($user, $conference)
        {
            return $user->id == $conference->organizer_id;
        });
    }

Затем в admin () используется гейт:

   public function admin($id){
        $conference = Conference::findOrFail($id);
        if(Gate::allows('access-management-area', $conference)) {
            return view('conference.admin')->with('conference',$conference);
        } else {
            return redirect('/');
        }
    }

1 Ответ

0 голосов
/ 29 июня 2018

Вы выполняете поиск findOrFail, он всегда возвращает 404, когда не может найти запись.

Вы можете сделать следующее:

 public function admin($id){
    $conference = Conference::find($id);

    if(!$conference){
      return redirect('/');
    }

    if(Gate::allows('access-management-area', $conference)) {
        return view('conference.admin')->with('conference',$conference);
    } 
    else{
        abort(403);
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...