簡體   English   中英

Laravel 路由中間件 auth:admin 不適用於所有路由

[英]Laravel Route Middleware auth:admin not working for all Routes

我想通過 auth:admin 中間件預先檢查兩個不同的路由組。 這非常適用於內部的第一個路由組,但不適用於其他命名空間中的第二個。

我的路由文件如下所示:

Route::group(['middleware' => ['auth:admin']], function(){

    Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });

    Route::group(['prefix' => 'team/{team_id}', 'namespace' => 'Team', 'as' => 'team.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });

});

如果我沒有登錄並嘗試轉到管理員/儀表板,我將被重定向到登錄/管理員。 但是,如果我嘗試轉到 team/1/dashboard,它會顯示錯誤“試圖獲取非對象的屬性“標題”。 我怎樣才能讓 auth:admin 中間件也與我的團隊路由一起工作?

創建一個中間件

class IsAdmin
{
    public function handle($request, Closure $next)
    {
        if (Auth::user()->permission == 'admin') {
            return $next($request);
        }

        return redirect()->route('some.route'); // If user is not an admin.
    }
}

kernel.php注冊

protected $routeMiddleware = [ .... 'is.admin' => \\App\\Http\\Middleware\\IsAdmin::class, ];

所以你的路線:

Route::group(['middleware' => 'is.admin'], function () {
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });

    Route::group(['prefix' => 'team/{team_id}', 'namespace' => 'Team', 'as' => 'team.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });
});

檢查 app/Http/Controllers/Middleware/RedirectIfAuthenticated.php 文件並更新不同守衛使用的代碼

// app/Http/Controllers/Middleware/RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    public function handle($request, Closure $next, $guard = null)
    {
        if ($guard == "admin" && Auth::guard($guard)->check()) {
            return redirect('/admin');
        }
        if ($guard == "writer" && Auth::guard($guard)->check()) {
            return redirect('/writer');
        }
        if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
}

暫無
暫無

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

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