Промежуточное ПО с разрешением Laravel 6,6, работающее на всех маршрутах - PullRequest
0 голосов
/ 03 февраля 2020

Привет, я работаю над проектом laravel, я должен проверить разрешение пользователя, когда он пытается получить доступ к одной странице, моя проблема в том, что я создал промежуточное ПО Permission и добавил его в ядро. 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();

            }
        }
    }
}

, и это мой маршрутный файл

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

Route::resource('Backup', 'BackupController')->name('index','Backup');

, как вы видите, я не применял промежуточное ПО на этих маршрутах буксировки, но промежуточное ПО работает с эти маршруты буксировки это мой код ядра

    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');
}

спасибо за предварительные пожелания

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Вы добавили свое промежуточное программное обеспечение в группу middelwareGroup web, которая применяет промежуточное программное обеспечение для каждого поступающего запроса.

Вам необходимо добавить свое промежуточное программное обеспечение в массив промежуточного программного обеспечения маршрутов: docs

// 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,
];

Затем можно применить промежуточное программное обеспечение для указания c маршрутов:

Route::resource('Login', 'LoginController')->middleware('Permissions')->name('index','Login');
0 голосов
/ 03 февраля 2020

вы добавили внутрь web, который является промежуточным ПО по умолчанию laravel, поэтому он применяется ко всем маршрутам.

для регистрации промежуточного программного обеспечения, которое необходимо добавить в protected $routeMiddleware = [ ] массив

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

    //custom middlewares:
    'Permissions' => \App\Http\Middleware\Permissions::class,
];

тогда только

Route::group(['middleware' => 'permissions'], function () {
  Route::resource('Backup', 'BackupController')->name('index','Backup');
}

будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...