Add this to the top of the middleware
use Closure;
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
Hey all,
Receiving this error
App\Http\Middleware\HasPermission::handle(): Argument #2 ($next) must be of type App\Http\Middleware\Closure, Closure given
This is my User Controller that is part of the problem I'm trying to solve.
use App\Http\Middleware\HasPermission;
class UserController extends Controller
{
public function __construct() {
$this->middleware(HasPermission::class, ['usermgmt.users','usermgmt.users.create','usermgmt.users.edit','users.delete'], ['only' => ['index','store']]);
$this->middleware(HasPermission::class, ['usermgmt.users.create'], ['only' => ['create','store']]);
$this->middleware(HasPermission::class, ['usermgmt.users.edit'], ['only' => ['edit','update']]);
$this->middleware(HasPermission::class, ['users.delete'], ['only' => ['destroy']]);
}
And here is the HasPermission Middleware
namespace App\Http\Middleware;
class HasPermission
{
public function handle($request, Closure $next,$permissions)
{
$permissions_array = explode('|', $permissions);
foreach($permissions_array as $permission){
if (!$request->user()->hasPermission($permission)){
return redirect()->back();
}
}
return $next($request);
}
}
I'm trying to make some custom middleware that will check the user's role before allowing them to access certain parts and permissions on the page.
Any help would be greatly appreciated, thanks!
@Tchopa Ok but pick one not both (for the same middleware) :)
Route::middleware('HasPermission:do-stuff')->group(function() { //still missing argument. Added it
Route::get('/usermgmt/users', [App\Http\Controllers\UserController::class, 'index'])->name('usermgmt.users');
Route::get('add-user', [App\Http\Controllers\UserController::class, 'create'])->name('usermgmt.users.create');
Route::delete('users/{user}',[App\Http\Controllers\UserController::class, 'destroy'])->name('users.destroy');
Route::get('users/{user}/edit', [App\Http\Controllers\UserController::class, 'edit'])->name('usermgmt.users.edit');
});
Please or to participate in this conversation.