How to protect routes with middleware for following conditions
i have users table and roles table
users table
id name email role_id
roles table
id name slug
1 admin admin
2 student student
3 teacher teacher
In User.php
public function role()
{
return $this->hasOne(Role::class,'id','role_id');
}
RoleGate.php
<?php
namespace App\Http\Middleware;
use Closure;
class RoleGate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next,$role)
{
if ($request->user() && $request->user()->role && $request->user()->role->slug === $role) {
return $next($request);
}
return redirect('/login');
}
}
Route:
//for student
Route::middleware(['role:student'])->group(function () {
Route::get('student',function(){
return"student";
});
});
//for teacher
Route::middleware(['role:teacher'])->group(function () {
Route::get('teacher',function(){
return"teacher";
});
});
//for admin
Route::middleware(['role:admin'])->group(function () {
Route::get('admin',function(){
return"admin";
});
});
This works fine but i want to make student and teacher route visible to admin.Admin
can view all route
How can i modify my logic inside handle() method