簡體   English   中英

如何將laravel 5.1中間件參數用於多個身份驗證和受保護的路由?

[英]How can I use laravel 5.1 middleware parameter for multiple auth and protected routes?

我是laravel 5.1的新手。 如何使用中間件參數來保護我的管理員路由不受用戶影響? 像這樣的東西:

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

我的“用戶”表中有一個字段“角色”,該字段具有兩個值:

  • 1個管理員
  • 2個給用戶

在我的應用程序中,用戶擁有受保護的路由。 我不想使用軟件包。

你可以做這樣的事情。 注入Guard類,然后使用它檢查用戶。 您實際上不需要傳遞參數。 只需將您的中間件命名為“ admin”或其他名稱即可。 以下中間件將檢查當前用戶的角色是否為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);        
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM