Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет.
Столкнулся с проблемой. Пытаюсь с помощью 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() не существует, когда должен. И как реализовать мою задумку?
Не в сети
Не в сети
}%Вообще должно работать, но можно сделать и явным образом:
%%(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
Не в сети
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 отказывается напрочь.
Не в сети
Может Ваш middleware срабатывает раньше, чем middleware сессий?
Не в сети
Может Ваш middleware срабатывает раньше, чем middleware сессий?
Так в том то и дело что нет.
Разве что он вызывается в Route::group.
Интересно что если вызывать его в каждом маршруте отдельно то все работает. Но если дать группе, то он выдаёт такую лабуду как я описал выше.
Хотелось бы выделить его группе, а не дублировать и прописывать на каждый маршрут.
Как то глупо что на группу не работает.
Не в сети
Код роута покажи, и как твой мидл прописан в kernel?
Не в сети
Вы в kernel не объявили
Не в сети
Код роута покажи, и как твой мидл прописан в 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,
Не в сети
Код роута покажи, и как твой мидл прописан в 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'); // Регистрация новой валюты
});
Не в сети
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 () {
//
}]);
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 () {
//
}
Не в сети
Страницы 1