0

Я новичок в laravel 5.1. Как использовать параметр промежуточного слоя для защиты моих маршрутов администратора от пользователей? что-то вроде этого:Как использовать параметр промежуточного программного обеспечения laravel 5.1 для нескольких аутентифицированных и защищенных маршрутов?

Route::group(['middleware' => 'auth:admin'], function()  
/* Admin only Routes*/ 
{ 
    ////// 
}); 

У меня есть поле "роль" в моем "пользователи" таблицы, которые получают два значения:

  • 1 для администратора
  • 2 для пользователей

В моем приложении пользователи имеют защищенный маршрут. Я не хочу использовать пакеты.

ответ

0

Вы можете сделать что-то вроде этого. Внесите класс Guard, затем используйте его для проверки пользователя. Вам не нужно действительно передавать параметр. Просто назовите свое «админ» промежуточного программного обеспечения или что-то еще. Следующее промежуточное программное обеспечение будет проверять, является ли роль текущего пользователя администратором, а если нет, перенаправлять на другой маршрут. Вы можете делать все, что захотите, при неудаче.

<?php 

namespace Portal\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 

class Admin 
{ 
    /** 
    * The Guard implementation. 
    * 
    * @var Guard 
    */ 
    protected $auth; 

    /** 
    * Create a new filter instance. 
    * 
    * @param Guard $auth 
    */ 
    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if($this->auth->user()->role != 'admin') { 
      return redirect()->route('not-an-admin'); 
     } 
     return $next($request);   
    } 
} 

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

public function handle($request, Closure $next, $role) 
    { 
     if($this->auth->user()->role != $role) { 
      return redirect()->route('roles-dont-match'); 
     } 
     return $next($request);   
    }