Intereting Posts
Можно ли использовать new как имя метода в PHP 5.3? PHP-скрипт для преобразования нескольких изображений в видео с помощью imagick как создать вложенный массив и сохранить его в базе данных? подавить ошибку apache 500 для «записи других» Настройка firebase v3 custom auth с php Проверьте, находится ли текущее время в два раза, с возможностью притирки дней Paypal Express checkout + php cURL Выполнить оплату не показывать уведомление об оплате в песочнице Время сервера вместо времени клиента JAVASCRIPT Развертывание веб-сайта Symfony 2.5.3 на рабочий сервер Как password_verify проверять пароли без знания соли и стоимости? PHPMailer генерирует PHP Warning: stream_socket_enable_crypto (): сертификат партнера не соответствует ожидаемому Угловая HTTP-почта для PHP и неопределенная Случайный PHP FastCGI / Сброс соединения с помощью одноранговых / неполных заголовков Как создать поле автоматического приращения Laravel, sync () – как синхронизировать массив, а также передавать дополнительные поля поворота?

laravel фильтр для проверки роли пользователя

Я создаю спокойный api в laravel 4, где есть пользователи с разными типами разрешений. Я хочу ограничить доступ к различным маршрутам в зависимости от роли пользователя (которая сохраняется в таблице пользователя в db)

Как мне это сделать? Вот что я до сих пор (пока он не работает).

filters.php

//allows backend api access depending on the user's role once they are logged in Route::filter('role', function() { return Auth::user()->role; }); 

routes.php

  Route::group(array('before' => 'role'), function($role) { if($role==1){ Route::get('customer/retrieve/{id}', 'CustomerController@retrieve_single'); Route::post('customer/create', 'CustomerController@create'); Route::put('customer/update/{id}', 'CustomerController@update'); } }); 

Возможно ли, что я пишу синтаксис неправильно для «группового фильтра»?

Попробуйте следующее:

filters.php

 Route::filter('role', function() { if ( Auth::user()->role !==1) { // do something return Redirect::to('/'); } }); 

routes.php

  Route::group(array('before' => 'role'), function() { Route::get('customer/retrieve/{id}', 'CustomerController@retrieve_single'); Route::post('customer/create', 'CustomerController@create'); Route::put('customer/update/{id}', 'CustomerController@update'); }); 

Существуют различные способы реализации этого, для запуска фильтров Route принимают аргументы:

 Route::filter('role', function($route, $request, $value) { // }); Route::get('someurl', array('before' => 'role:admin', function() { // })); 

Вышеприведенное будет вводить администратор в ваш фильтр Route ::, доступный через параметр $ value. Если вам нужна более сложная фильтрация, вы всегда можете использовать собственный класс фильтра маршрутов (проверьте классы фильтров): http://laravel.com/docs/routing#route-filters

Вы также можете фильтровать в своем контроллере, что обеспечивает лучший подход, когда вам необходимо фильтровать на основе определенных контроллеров и методов: http://laravel.com/docs/controllers#controller-filters

Наконец, вы можете использовать что-то вроде Sentry2, которое предоставляет полное решение RBAC для использования в вашем проекте: https://cartalyst.com/manual/sentry

Из laravel 5.1.11 вы можете использовать AuthServiceProvider: https://laravel.com/docs/5.1/authorization