OMNI Access v1.3.0 Free ~10 min read

Protecting Routes with Middleware

Guard routes with role, permission, and role-or-permission middleware, including parameter syntax and combined protection patterns.

A Administrator Oct 27, 2026 4 Steps 2,735 views
Discussion (0)
Step 1 of 4

Available Middleware

  • role - Check if user has specific role(s)
  • permission - Check if user has specific permission(s)
  • role_or_permission - Check if user has role OR permission
Step 2 of 4

Role Middleware

// Single role
Route::middleware(['auth', 'role:admin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

// Multiple roles (user must have at least one)
Route::middleware('role:admin,editor')->group(function () {
    Route::resource('posts', PostController::class);
});

// In controller
public function __construct()
{
    $this->middleware('role:admin')->except(['index', 'show']);
}
php
// Single role
Route::middleware(['auth', 'role:admin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

// Multiple roles (user must have at least one)
Route::middleware('role:admin,editor')->group(function () {
    Route::resource('posts', PostController::class);
});

// In controller
public function __construct()
{
    $this->middleware('role:admin')->except(['index', 'show']);
}
Step 3 of 4

Permission Middleware

// Single permission
Route::middleware(['auth', 'permission:posts.edit'])->group(function () {
    Route::get('/posts/{post}/edit', [PostController::class, 'edit']);
});

// Multiple permissions
Route::middleware('permission:posts.edit,posts.delete')->group(function () {
    Route::put('/posts/{post}', [PostController::class, 'update']);
    Route::delete('/posts/{post}', [PostController::class, 'destroy']);
});
php
// Single permission
Route::middleware(['auth', 'permission:posts.edit'])->group(function () {
    Route::get('/posts/{post}/edit', [PostController::class, 'edit']);
});

// Multiple permissions
Route::middleware('permission:posts.edit,posts.delete')->group(function () {
    Route::put('/posts/{post}', [PostController::class, 'update']);
    Route::delete('/posts/{post}', [PostController::class, 'destroy']);
});
Step 4 of 4

Role OR Permission Middleware

// User needs either admin role OR posts.manage permission
Route::middleware('role_or_permission:admin,posts.manage')->group(function () {
    Route::resource('posts', PostController::class);
});

// Multiple checks
Route::middleware('role_or_permission:admin,editor,posts.publish')
    ->post('/posts/{post}/publish', [PostController::class, 'publish']);

PRO Feature: Advanced middleware like geo-restrictions, time-based permissions, and IP restrictions are available in PRO. Learn more → (#comparison)

php
// User needs either admin role OR posts.manage permission
Route::middleware('role_or_permission:admin,posts.manage')->group(function () {
    Route::resource('posts', PostController::class);
});

// Multiple checks
Route::middleware('role_or_permission:admin,editor,posts.publish')
    ->post('/posts/{post}/publish', [PostController::class, 'publish']);
Previous Step

Congratulations! You Completed This Guide

You've walked through all 4 steps for OMNI Access v1.3.0. Keep practicing and exploring more hands-on tutorials.

Community Discussions 0

Ask questions, share step solutions, or discuss software workflows with other professionals.

Moderated Community

Join the Community Discussion

Got stuck on a step or have a question about this configuration? Sign in to join the discussion and receive direct advice from instructors and peers.

No Discussions Yet

Have a question or found a clever tip for this guide? Start the conversation using the comment box above!

Promotional Ads Available Space
Place Your advertising ads Here

Promote your brand, product, or service directly to our active readers and community.

Contact Us