Auto generate Laravel middleware with role-based authentication
amranibrahem/laravel-middleware-generator is a Laravel package for auto generate laravel middleware with role-based authentication.
It currently has 0 GitHub stars and 11 downloads on Packagist (latest version v1.1.9).
Install it with composer require amranibrahem/laravel-middleware-generator.
Discover more Laravel packages by amranibrahem
or browse all Laravel packages to compare alternatives.
Last updated
π Generate Custom Middleware Automatically with Professional Code Structure
A powerful Laravel package that automatically generates custom middleware with various authentication types, professional PHPDoc, and complete setup.
You can install the package via Composer:
composer require amranibrahem/laravel-middleware-generator
The package will automatically register its service provider.
Basic Commands Generate Role-Based Middleware
php artisan middleware:generate Admin
Generate with Specific Role
php artisan middleware:generate Admin --role=admin
Generate Permission-Based Middleware
php artisan middleware:generate CanEdit --type=permission --permission=edit-posts
Generate with API Guard
php artisan middleware:generate ApiAuth --guard=api
Generate with Tests
php artisan middleware:generate Admin --test
Advanced Examples IP Whitelist Middleware
php artisan middleware:generate Internal --type=ip --ip="192.168.1.1,127.0.0.1"
Header-Based Authentication
php artisan middleware:generate ApiKey --type=header --header=X-API-Key --header-value=secret123
Subscription-Based Access
php artisan middleware:generate Premium --type=subscription --subscription=premium
Boolean Field Check
php artisan middleware:generate SuperAdmin --boolean --field=is_super_admin
Custom Error Message
php artisan middleware:generate Admin --message="Administrator access required" --code=401
Role-Based Middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param string $role Required role
*/
public function handle(Request $request, Closure $next, string $role = 'admin'): Response
{
// Check if user has role = $role
if ($request->user() && $request->user()->role === $role) {
return $next($request);
}
return response()->json([
'message' => 'Administrator access required',
'code' => 403
], 403);
}
}
Permission-Based Middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CanEditMiddleware
{
/**
* Handle an incoming request.
*
* @param string $permission Required permission
*/
public function handle(Request $request, Closure $next, string $permission = 'edit-posts'): Response
{
// Check if user has permission: $permission
if ($request->user() && $request->user()->can($permission)) {
return $next($request);
}
return response()->json([
'message' => 'Insufficient permissions',
'code' => 403
], 403);
}
}
IP-Based Middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class InternalMiddleware
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
// Check if request IP is in allowed list: 192.168.1.1,127.0.0.1
if (in_array($request->ip(), ['192.168.1.1', '127.0.0.1'])) {
return $next($request);
}
return response()->json([
'message' => 'IP address not allowed',
'code' => 403
], 403);
}
/**
* Get allowed IP addresses
*/
protected function getAllowedIps(): array
{
return ['192.168.1.1', '127.0.0.1'];
}
}
| Option | Description | Default |
|:---|:---|:---|
| --type | Middleware type | role |
| --role | Role to check | name lowercase |
| --permission | Permission to check | access.{name} |
| --subscription | Subscription plan | premium |
| --ip | Allowed IPs | 127.0.0.1,192.168.1.1 |
| --header | Header to check | X-API-Key |
| --header-value | Header value | your-secret-key |
| --message | Error message | Type-based |
| --code | HTTP status | 403 |
| --field | User field | role |
| --boolean | Boolean field | false |
| --model | User model | User |
| --guard | Auth guard | web |
| --test | Generate test | false |
Static Role Check
Route::middleware('admin')->group(function () {
Route::get('/admin/dashboard', [DashboardController::class, 'admin']);
});
Dynamic Role Check
Route::middleware('admin:manager')->get('/manager', [ManagerController::class, 'index']);
Permission-Based Routes
Route::middleware('canedit')->group(function () {
Route::post('/posts', [PostController::class, 'store']);
});
Route::middleware('canedit:delete-users')->delete('/users/{id}', [UserController::class, 'destroy']);
IP-Based Routes
Route::middleware('internal')->group(function () {
Route::get('/internal/api', [InternalController::class, 'index']);
});
<?php
namespace Tests\Unit\Middleware;
use Tests\TestCase;
use Illuminate\Http\Request;
use App\Http\Middleware\AdminMiddleware;
use Illuminate\Foundation\Testing\RefreshDatabase;
class AdminMiddlewareTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function it_allows_access_when_condition_met()
{
// TODO: Implement test based on your middleware logic
$request = new Request();
$middleware = new AdminMiddleware();
$response = $middleware->handle($request, function ($req) {
return response('OK');
});
$this->assertEquals('OK', $response->getContent());
}
/** @test */
public function it_denies_access_when_condition_not_met()
{
// TODO: Implement test based on your middleware logic
$request = new Request();
$middleware = new AdminMiddleware();
$response = $middleware->handle($request, function ($req) {
return response('OK');
});
$this->assertEquals(403, $response->getStatusCode());
$this->assertJsonStringEqualsJsonString(
'{"message":"Administrator access required","code":403}',
$response->getContent()
);
}
}
π Starting Admin Middleware Generation...
π― Select Middleware Type:
βββββββββββββββββββββββ
> Role-based (user.role === "admin")
π Generation Summary:
βββββββββββββββββββββββ
πΉ Middleware Name: Admin
πΉ Type: role
πΉ Role Check: 'admin'
πΉ Status Code: 403
πΉ User Model: User
πΉ Guard: web
βββββββββββββββββββββββ
π Creating Middleware File...
β
Created middleware: AdminMiddleware.php
π Registering in Kernel...
β
Registered middleware in Kernel.php ($middlewareAliases)
βοΈ Updating Auth Configuration...
β
Added role guard to auth.php
π£οΈ Creating Route Example...
β
Added route example to api.php
π§ͺ Creating Test File...
β
Created test: AdminMiddlewareTest.php
π Middleware Generation Completed Successfully!
βββββββββββββββββββββββββββββββββββββββ
π Final Configuration:
β’ Middleware: Admin
β’ Type: role
β’ Role: 'admin'
β’ Field: 'role'
β’ Boolean: No
β’ Status Code: 403
β’ Error Message: 'Administrator access required'
β’ User Model: User
β’ Guard: web
βββββββββββββββββββββββββββββββββββββββ
π‘ Usage Examples:
Route::middleware('admin')->group(function () {
Route::get('/admin/dashboard', [DashboardController::class, 'admin']);
});
βββββββββββββββββββββββββββββββββββββββ
π§ Next Steps:
1. Run: php artisan route:list
2. Run: php artisan test
3. Test your middleware thoroughly
βββββββββββββββββββββββββββββββββββββββ
app/Http/Middleware/{Name}Middleware.phpapp/Http/Kernel.phpconfig/auth.php for rolesroutes/api.php or routes/web.phptests/Unit/Middleware/php artisan middleware:generate SuperAdmin --boolean --field=is_super_admin
Custom HTTP Status Codes
php artisan middleware:generate Auth --code=401 --message="Authentication required"
API-Focused Middleware
php artisan middleware:generate ApiAuth --guard=api --test
Internal API Protection
php artisan middleware:generate InternalApi --type=ip --ip="10.0.0.0/8" --log
php artisan route:list to see registered middlewareKernel.php for proper registrationconfig/auth.php| Feature | This Package | Manual Creation | |---------|--------------|-----------------| | Time Saving | β (Seconds) | β (Minutes/Hours) | | Professional Structure | β | β | | Auto Registration | β | β | | Route Examples | β | β | | Test Generation | β | β | | Multiple Types | β | β | | Interactive Setup | β | β | | Error Handling | β | β |
This package is open-sourced software licensed under the MIT license.
Please see CONTRIBUTING for details.
If you discover any issues, please use the GitHub issue tracker.
β Star us on GitHub if this package helped you!
π Happy coding!