Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.03.2016 01:29:47

Middleware статус

Всем привет.
Столкнулся с проблемой. Пытаюсь с помощью Middleware сделать разграничение доступа.

    public function handle($request, Closure $next)
    {
        //todo написать ACL. По какой то причине не работает Auth::user()
        if(Auth::user()->stat == 1) {
            return $next($request);
        } else {
            return redirect('/');
        }
    }

Я так понимаю не работает Auth::user().
Через var_dump он вообще NULL возвращает. Вопрос. Почему, когда я авторизован и все должно работать.
Ошибка:

Trying to get property of non-object

Оно и логично, если Auth::user() = Null, то ->stat не существует вообще.
stat это поле в таблице БД.

Подскажите, что я делаю не так и почему Auth::user() не существует, когда должен. И как реализовать мою задумку?

Не в сети

#2 05.03.2016 01:38:14

duster
Откуда: Мельбурн
Сообщений: 148

Re: Middleware статус

Вообще должно работать, но можно сделать и явным образом:

PHP
    protected $auth;

    public function 
__construct(Guard $auth)
    {
        
$this->auth $auth;
    }

    public function 
handle()
    {
        if (
$this->auth->check() && $this->auth->user()->stat == 1) {}
    }

Не в сети

#3 09.03.2016 00:35:36

Re: Middleware статус

duster пишет:

}%Вообще должно работать, но можно сделать и явным образом:

%%(php)
    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle()
    {
        if ($this->auth->check() && $this->auth->user()->stat == 1) {}
    }
%%

Аналогично. Не работает.
var_dump($this->auth->user()) Показывает null.
var_dump($this->auth->user()->stat) показывает:

Trying to get property of non-object

Не в сети

#4 09.03.2016 00:52:58

Re: Middleware статус

Fixlix пишет:
duster пишет:

}%Вообще должно работать, но можно сделать и явным образом:

%%(php)
    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle()
    {
        if ($this->auth->check() && $this->auth->user()->stat == 1) {}
    }
%%

Аналогично. Не работает.
var_dump($this->auth->user()) Показывает null.
var_dump($this->auth->user()->stat) показывает:

Trying to get property of non-object

Если выполнять проверку var_dump'ом, в контроллере все работает нормально, но в middleware отказывается напрочь.

Не в сети

#5 09.03.2016 05:18:02

duster
Откуда: Мельбурн
Сообщений: 148

Re: Middleware статус

Может Ваш middleware срабатывает раньше, чем middleware сессий?

Не в сети

#6 14.03.2016 11:46:36

Re: Middleware статус

duster пишет:

Может Ваш middleware срабатывает раньше, чем middleware сессий?

Так в том то и дело что нет.
Разве что он вызывается в Route::group.
Интересно что если вызывать его в каждом маршруте отдельно то все работает. Но если дать группе, то он выдаёт такую лабуду как я описал выше.
Хотелось бы выделить его группе, а не дублировать и прописывать на каждый маршрут.

Как то глупо что на группу не работает.

Не в сети

#7 17.03.2016 16:38:15

Re: Middleware статус

Код роута покажи, и как твой мидл прописан в kernel?

Не в сети

#8 17.03.2016 17:09:52

Re: Middleware статус

Вы в kernel не объявили

Не в сети

#9 18.03.2016 19:33:04

Re: Middleware статус

LeXXXX35 пишет:

Код роута покажи, и как твой мидл прописан в kernel?

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'acl' => \App\Http\Middleware\AccessControlList::class,
    ];

Вот собственно та строчка:

'acl' => \App\Http\Middleware\AccessControlList::class,

Не в сети

#10 18.03.2016 19:38:49

Re: Middleware статус

LeXXXX35 пишет:

Код роута покажи, и как твой мидл прописан в kernel?

Вот код роута.
Так работает:

Route::group(['middleware' => 'web'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem', 'middleware' => 'acl', 'middleware' => 'auth']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories', 'middleware' => 'acl', 'middleware' => 'auth']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies', 'middleware' => 'acl', 'middleware' => 'auth']); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой валюты
});

Так не работает:

Route::group(['middleware' => 'web', 'middleware' => 'acl', 'middleware' => 'auth'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies'); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory'); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency'); // Регистрация новой валюты
});

Не в сети

#11 20.03.2016 10:38:28

WebDev

Re: Middleware статус

Fixlix пишет:
LeXXXX35 пишет:

Код роута покажи, и как твой мидл прописан в kernel?

Вот код роута.
Так работает:

Route::group(['middleware' => 'web'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem', 'middleware' => 'acl', 'middleware' => 'auth']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories', 'middleware' => 'acl', 'middleware' => 'auth']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies', 'middleware' => 'acl', 'middleware' => 'auth']); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой валюты
});

Так не работает:

Route::group(['middleware' => 'web', 'middleware' => 'acl', 'middleware' => 'auth'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies'); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory'); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency'); // Регистрация новой валюты
});

Route::get('/', ['middleware' => ['first', 'second'], function () {
    //
}]);

#12 20.03.2016 13:03:05

Re: Middleware статус

WebDev пишет:
Fixlix пишет:
LeXXXX35 пишет:

Код роута покажи, и как твой мидл прописан в kernel?

Вот код роута.
Так работает:

Route::group(['middleware' => 'web'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems', 'middleware' => 'acl', 'middleware' => 'auth']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem', 'middleware' => 'acl', 'middleware' => 'auth']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories', 'middleware' => 'acl', 'middleware' => 'auth']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies', 'middleware' => 'acl', 'middleware' => 'auth']); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency', 'middleware' => 'acl', 'middleware' => 'auth']); // Регистрация новой валюты
});

Так не работает:

Route::group(['middleware' => 'web', 'middleware' => 'acl', 'middleware' => 'auth'], function () {
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem']); // Подробный просмотр товара и модификация

    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories']); // Список категорий
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies'); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory'); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency'); // Регистрация новой валюты
});

Route::get('/', ['middleware' => ['first', 'second'], function () {
    //
}]);

Спасибо. Как раз сам пару дней назад догадался.
Реализовал следующим образом:

Route::group(['middleware' => ['web', 'auth', 'acl']], function () {
    //
}

Не в сети

Подвал раздела