2015-12-17 7 views
3

У меня есть ниже маршрут, который проверяет, если пользователь проходит проверку подлинности и только тогда пусть они получить доступ к страницеавторизации вместе с аутентификацией в Route.php: Laravel 5.1

<?php 
Route::group([ 
    'middleware' => 'auth', 
], function() { 

    Route::get('/Categories-List', 'Skills\[email protected]'); 
}); 

В моей auth()->user() есть RoleID чтобы проверить, является ли пользователь администратором или другой ролью. Я хочу проверить, является ли RoleID равным 1, а затем разрешает им доступ к странице.

Могу ли я установить Авторизация наряду с проверкой подлинности в Laravel 5.1

ответ

6

Итак, что вам нужно, чтобы создать AdminMiddleware и добавить его к маршрутам.

Во-первых, открыть User модель и добавить дополнительный метод в нем:

public function isAdmin() 
{ 
    return $this->RoleID == 1; 
} 

Теперь запускаем в консоли:

php artisan make:middleware AdminMiddleware

открыть свой метод AdminMiddleware.php и изменить handle так это должно выглядеть это:

if (!\Auth::user()->isAdmin()) { 
    if ($request->ajax()) { 
     return response('Admin account required.', 401); 
    } else { 
     return redirect('/'); // set here any url you need 
    } 
} 

return $next($request); 

Теперь откройте app/Http/Kernel.php и добавить в $routeMiddleware собственность новую запись:

'isAdmin' => \App\Http\Middleware\AdminMiddleware::class, 

Наконец изменения в маршрутах

'middleware' => 'auth', 

в

'middleware' => ['auth', 'isAdmin'], 

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

В зависимости от ваших потребностей вы также можете использовать только промежуточное ПО isAdmin здесь, в случае, если для этого маршрута вы хотите сделать другое перенаправление, чем в auth, когда пользователь не зарегистрирован. В этом случае вам необходимо объединить методы от auth и isAdmin и подгонять их под ваши нужды.

+0

@ Helper Это хаиндинг, когда пользователь не является администратором? Если да, то для '/' url определены какие-либо средние?Вы должны перенаправить в «AdminMiddleware» для маршрутизации, где вы не используете промежуточное ПО 'isAdmin' –

+0

Если пользователь зарегистрирован, но не является администратором, и ударил маршрут, защищенный' isAdmin', он будет перенаправлен на '/', и позже они будут перенаправлены снова к '/' - вот почему вы это получите. Вы должны использовать в новом маршруте AdminMiddleware, например 'limited', и создать новый маршрут' limited', где вы показываете, что эта страница ограничена только для администратора, или вы должны использовать перенаправление на главный URL-адрес для зарегистрированного пользователя –

+0

http: // stackoverflow. ком/вопросы/34560621/призыв к непредсказуемому,-методу-освещающего-подставок-фасадам-validatorresolver – Pankaj

2

То, что вы хотите сделать, это запустить несколько - один промежуточное программное авторизовать пользователя, а другой, чтобы проверить свой уровень доступа.

То, что вы хотите сделать, это определить в промежуточное программное массив так:

<?php 
Route::group([ 
    'middleware' => ['auth','isAdmin'], 
], function() { 

    Route::get('/Categories-List', 'Skills\[email protected]'); 
}); 

Вы можете видеть, я добавил isAdmin промежуточное программное обеспечение, что будет делать проверку, что вам нужно. Вам нужно только создать промежуточное ПО самостоятельно.

Много другой информации о маршрутах промежуточного слоя на здесь: http://laravel.com/docs/master/middleware#assigning-middleware-to-routes