0

我是 laravel 5.1 的新手。 如何使用中间件参数来保护我的管理员路由免受用户的攻击? 像这样的东西:

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

我的“用户”表中有一个“角色”字段,它有两个值:

  • 1个管理员
  • 2 用户

在我的应用程序中,用户有他们的受保护路线。我不想使用包。

4

1 回答 1

0

你可以做这样的事情。注入 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);        
    }
于 2015-09-20T17:44:02.630 回答