amranibrahem / laravel-middleware-generator
Auto generate Laravel middleware with role-based authentication
Installs: 11
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/amranibrahem/laravel-middleware-generator
Requires
- php: ^8.0
- laravel/framework: ^9.0|^10.0
README
๐ 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.
โจ Features
- โ Multiple Middleware Types (Role, Permission, Subscription, IP, Header, Custom)
- โ Professional PHPDoc with parameter documentation
- โ Automatic Kernel Registration in Laravel
- โ Auth Configuration Updates for role-based guards
- โ Route Examples with usage patterns
- โ Test File Generation with PHPUnit
- โ Interactive Configuration with beautiful console UI
- โ Custom Error Messages with smart defaults
- โ Boolean Field Support for role checks
- โ Multi-Guard Support (web, api, custom)
๐ Installation
You can install the package via Composer:
composer require amranibrahem/laravel-middleware-generator
The package will automatically register its service provider.
๐ Usage
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
๐ฏ Generated Code Examples
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']; } }
โ๏ธ Command Options
| 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 |
๐ฃ๏ธ Route Usage Examples
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']); });
๐งช Generated Test Example
<?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() ); } }
๐จ Console Output
๐ 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 โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ง Supported Middleware Types
1. Role-Based
- Checks user role against specified value
- Supports dynamic role parameters
- Boolean field support
2. Permission-Based
- Uses Laravel's authorization system
- Supports dynamic permission parameters
- Works with gates and policies
3. Subscription-Based
- Checks user subscription plans
- Perfect for SaaS applications
- Customizable field names
4. IP-Based
- IP address whitelisting
- Multiple IP support
- Internal API protection
5. Header-Based
- API key authentication
- Custom header validation
- Secret key verification
6. Custom
- Extensible template
- Manual implementation
- Custom business logic
๐ก๏ธ Security Features
- Proper Authentication Checks - Verifies user existence before role checks
- HTTP Status Codes - Appropriate status codes (401, 403, 503)
- JSON Responses - Consistent error response format
- Input Validation - Safe parameter handling
- Guard Support - Multiple authentication guards
๐ Auto-Generated Files
- Middleware File -
app/Http/Middleware/{Name}Middleware.php - Kernel Registration - Auto-added to
app/Http/Kernel.php - Auth Configuration - Updated
config/auth.phpfor roles - Route Examples - Added to
routes/api.phporroutes/web.php - Test Files - Generated in
tests/Unit/Middleware/
๐ก Best Practices
Use Boolean Fields for Single Roles
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
๐ Troubleshooting
Middleware not found in routes?
- Run
php artisan route:listto see registered middleware - Check
Kernel.phpfor proper registration
Authentication not working?
- Verify guard configuration in
config/auth.php - Check user model field names match middleware configuration
Tests failing?
- Implement actual test logic in generated test files
- Mock user authentication in tests
๐ Comparison with Alternatives
| Feature | This Package | Manual Creation |
|---|---|---|
| Time Saving | โ (Seconds) | โ (Minutes/Hours) |
| Professional Structure | โ | โ |
| Auto Registration | โ | โ |
| Route Examples | โ | โ |
| Test Generation | โ | โ |
| Multiple Types | โ | โ |
| Interactive Setup | โ | โ |
| Error Handling | โ | โ |
๐ License
This package is open-sourced software licensed under the MIT license.
๐ค Contributing
Please see CONTRIBUTING for details.
๐ Reporting Issues
If you discover any issues, please use the GitHub issue tracker.
๐ Credits
๐ Links
โญ Star us on GitHub if this package helped you!
๐ Happy coding!