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

Я новичок в ларавеле 5.1. Как я могу использовать параметр промежуточного ПО для защиты маршрутов администратора от пользователей? примерно так:

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

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

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

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


person behnam    schedule 20.09.2015    source источник


Ответы (1)


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

<?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);        
    }
person Cor Bosman    schedule 20.09.2015