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
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.