简体   繁体   中英

Laravel Create Custom Middleware to check User Permissions via Routes

I'd like to create a Custom Middleware to check if my user is allowed to enter the classroom. The classroom related routes should be protected by the ClassRoom Middleware, to check the user permission before redirecting to the controllers.

This is the classroom route group:

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

This is the code to check the permission:

    $classroom = ClassRoom::findOrFail($classroom_id);

        $ok = false;
        foreach ($classroom->users as $classroom_user) {
          if ($classroom_user->id == user()->id) {
            $ok = true;
          }
        }

        if (!$ok) {
          return redirect()->route('user.classrooms.index');
        }

Run command:

php artisan make:middleware CheckPermission

Your middleware:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

       // apply your permission logic here

        return $next($request);
    }
}

app/Http/Kernel.php

protected $routeMiddleware = [
    ... ,
    'check-permission' => \App\Http\Middleware\CheckPermission::class,
];

In route file (web.php)

Route::group(['middleware' => ['check-permission'], 'prefix' => 'classroom/{classroom_id}', 'namespace' => 'Classroom', 'as' => 'classroom.'], function(){
    Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
});

To create middleware in laravel you use php artisan make:middleware YourCustomMiddleWare

You'll then need to register it in app/Http/Kernel.php in the protected routeMiddleware array

You add it to the route like a regular middleware

https://laravel.com/docs/5.8/middleware

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM