权限中间件,使用Laravel 6.6处理所有路由

权限中间件,使用Laravel 6.6处理所有路由,laravel,routes,laravel-middleware,Laravel,Routes,Laravel Middleware,您好,我正在从事laravel项目,当用户试图访问一个页面时,我必须检查用户的权限,我的问题是在我创建了权限中间件并将其添加到kernel.php中之后,它检查所有路由的权限,即使我在任何路由中都没有调用它。 我不想在所有路由上应用这个中间件,只是其中的一部分。 这是我的密码 namespace App\Http\Middleware; use Closure; use Session; use App\Rules; use Illuminate\Support\Facades\Route;

您好,我正在从事laravel项目,当用户试图访问一个页面时,我必须检查用户的权限,我的问题是在我创建了权限中间件并将其添加到kernel.php中之后,它检查所有路由的权限,即使我在任何路由中都没有调用它。 我不想在所有路由上应用这个中间件,只是其中的一部分。 这是我的密码

namespace App\Http\Middleware;

use Closure;
use Session;
use App\Rules;
use Illuminate\Support\Facades\Route;
use URL;

class Permissions  

 { 

   public function handle($request, Closure $next) {

       $rolename=Session::get('rule_name') ;
       $route = $request->path();

       $hasPermission = Rules::where('rule_name', 'superadmin')->where('allowed_pages', 'like', '%' . $route . '%') ->first();

            if (empty($hasPermission)) {

                echo 'Unauthorized.<a href="' . URL::to('/admin') . '">Go Back</a>';

                die();

            }
        }
    }
}
正如您所见,我没有在这两条路径上应用中间件,但中间件正在使用这两条路径 这是我的核心代码

    protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
         'Permissions' => \App\Http\Middleware\Permissions::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];
我只想通过这样的路径运行这个中间件

Route::group(['middleware' => 'permissions'], function () {
  Route::resource('Backup', 'BackupController')->name('index','Backup');
}
谢谢你提前通知
致以最诚挚的问候

您在
web
中添加了这是laravel默认的中间件,这就是为什么它应用于所有路由

要注册中间件,您需要添加受保护的$routeMiddleware=[]array

protected$routeMiddleware=[
'auth'=>\App\Http\Middleware\Authenticate::class,
'auth.basic'=>\illumb\auth\Middleware\AuthenticateWithBasicAuth::class,
“绑定”=>\illumb\Routing\Middleware\SubstituteBindings::class,
'cache.headers'=>\illumb\Http\Middleware\SetCacheHeaders::class,
'can'=>\illumb\Auth\Middleware\Authorize::class,
'guest'=>\App\Http\Middleware\RedirectIfAuthenticated::class,
'signed'=>\illumb\Routing\Middleware\ValidateSignature::class,
“throttle'=>\illumb\Routing\Middleware\ThrottleRequests::class,
“已验证”=>\illumb\Auth\Middleware\EnsureMailisVerified::class,
//定制中间件:
“权限”=>\App\Http\Middleware\Permissions::class,
];
那么只有

Route::组(['middleware'=>'permissions'],函数(){
路由::资源('Backup','BackupController')->名称('index','Backup');
}

它将工作

您将中间件添加到middelwareGroup
web
,它将中间件应用于提交的每个请求

您需要将中间件添加到路由器中间件阵列:

您可以将中间件应用于特定路由:

Route::resource('Login', 'LoginController')->middleware('Permissions')->name('index','Login');

不要在
web
create indivdial中应用,而要在单个路由中应用
// Within App\Http\Kernel Class...

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    ...
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

    // your own middlewares:
    'Permissions' => \App\Http\Middleware\Permissions::class,
];
Route::resource('Login', 'LoginController')->middleware('Permissions')->name('index','Login');