Laravel - перенаправление из контроллера не работает - PullRequest
0 голосов
/ 03 марта 2019

У меня есть этот метод в моем DocumentsController, и я пытаюсь реализовать некоторую простую систему разрешений, в которой пользователю, который не является администратором, должен быть назначен филиал и отдел перед добавлением, редактированием или удалением Document,Вот код для метода

    /**
     * Check the credentials of the user that is not an admin
     * to add, modify a document
     */
    private function checkCredentials() {
        $user = auth()->user();
        // dd((!is_admin() && !$user->branch_id && !$user->department_id));
        if (!is_admin() && !$user->branch_id && !$user->department_id) {
            // dd(redirect()->route('documents'));
            return redirect()->route('documents')->with([
                'class' => 'alert-danger',
                'message' => 'Ask your administrator to assign you a branch and department first',
            ]);
        }
    }

А вот как я вызываю его в одном из моих методов контроллера, которые сопоставлены с маршрутом Route::get('/documents/add', ['as' => 'documents.add', 'uses' => 'DocumentsController@create',]);

public function create()
{
    $this->checkCredentials();

    ...

    return view('main/documents/create', $data);
}

Проблема заключается в перенаправлениине работает, так как продолжает отображать форму, даже если пользователю еще не присвоен филиал или отдел, то есть когда оба значения branch_id и department_id равны null.

В чем может быть причина этого?Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я думаю, что вы используете авторизацию (gate / policy).https://laravel.com/docs/5.8/authorization

Ваш код должен быть

<?php

private function checkCredentials() {
    $user = auth()->user();
    if (!is_admin() && !$user->branch_id && !$user->department_id) {
        return redirect()->route('documents.add')->with([
            'class' => 'alert-danger',
            'message' => 'Ask your administrator to assign you a branch and department first',
        ]);
    }
}

public function create()
{
    $this->checkCredentials();

    //...

    return view('main/documents/create', compact('data'));
}
0 голосов
/ 03 марта 2019

Вы не возвращаете перенаправление с контроллера, попробуйте это:

 /**
 * Check the credentials of the user that is not an admin
 * to add, modify a document
 */
private function checkCredentials() {
    $user = auth()->user();
    // dd((!is_admin() && !$user->branch_id && !$user->department_id));
    if (!is_admin() && !$user->branch_id && !$user->department_id) {
        // dd(redirect()->route('documents'));
      return false;
    }
}

public function create()
{
    if(!$this->checkCredentials()) {
        return redirect()->route('documents')->with([
            'class' => 'alert-danger',
            'message' => 'Ask your administrator to assign you a branch and department first',
        ]);
     }

    ...

    return view('main/documents/create', $data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...