Release Notes - Laravel Media Secure v3.1.0
๐ Major Architecture Refactoring
This release introduces a significant architectural improvement that enhances security, maintainability, and follows Laravel best practices by implementing proper separation of concerns through middleware.
โจ New Features
๐ก๏ธ ValidateMediaAccess Middleware
- New dedicated middleware
ValidateMediaAccessfor handling all media validation and authorization - Centralized security logic that validates media access types, authorizes users, and prepares media data
- Mandatory middleware that cannot be bypassed, ensuring consistent security across all media requests
- Request attribute injection - media is pre-validated and attached to request attributes for controller use
๐ Enhanced Configuration
- Comprehensive documentation with detailed comments explaining each configuration option
- Mandatory middleware declaration using full class reference
ValidateMediaAccess::class - Security-focused explanations highlighting the importance of each setting
- Usage examples and best practices included in configuration comments
๐ง Breaking Changes
Controller Refactoring
- Simplified MediaController - now only handles response generation after middleware validation
- Removed validation logic from controller (moved to middleware)
- Pre-validated media access - controller retrieves media from
$request->attributes->get('media')
Middleware Configuration
- New mandatory middleware
ValidateMediaAccess::classadded to default middleware stack - Updated route configuration to include the new middleware by default
- Breaking change: Applications must include the new middleware in their routes
๐งช Testing Improvements
Pest PHP Test Suite
- Converted from PHPUnit to Pest PHP for modern, readable test syntax
- Comprehensive middleware testing covering all validation scenarios:
- Access type validation (view/download/stream)
- Authorization checks with proper user permissions
- Media attribute injection verification
- Individual media type handling tests
- Database integration tests with proper Media model creation
- Gate mocking for authorization testing
๐ Security Enhancements
Improved Authorization Flow
- Media access type validation - ensures only valid types (view/download/stream) are accepted
- Media existence verification - validates media exists before authorization
- User authorization - checks user permissions via MediaPolicy
- Request preparation - safely injects validated media into request attributes
Middleware Security Features
- Input validation using
MediaAccess::acceptable()method - 404 responses for non-existent media (via
firstOrFail()) - 403 responses for unauthorized access attempts
- 422 responses for invalid media access types
๐ File Structure Changes
New Files
src/Http/Middleware/ValidateMediaAccess.php # New middleware class
tests/Feature/MediaMiddlewareTest.php # Comprehensive Pest tests
Modified Files
src/Http/Controllers/MediaController.php # Simplified controller logic
config/laravel-media-secure.php # Enhanced documentation
routes/web.php # Updated middleware stack
๐ ๏ธ Migration Guide
For Existing Applications
- Update your routes to include the new middleware:
// Before
Route::get('media/{type}/{uuid}', MediaController::class)
->middleware(['auth', 'verified']);
// After
Route::get('media/{type}/{uuid}', MediaController::class)
->middleware(['auth', 'verified', ValidateMediaAccess::class]);- Register the middleware in your
app/Http/Kernel.phpif using custom route definitions:
protected $routeMiddleware = [
// ... other middleware
'validate-media-access' => \CleaniqueCoders\LaravelMediaSecure\Http\Middleware\ValidateMediaAccess::class,
];- Update configuration by republishing the config file:
php artisan vendor:publish --provider="CleaniqueCoders\LaravelMediaSecure\LaravelMediaSecureServiceProvider" --tag="config" --force๐ Performance Improvements
- Single media query - middleware fetches media once and reuses it
- Eliminated duplicate validation - all validation happens in middleware
- Streamlined controller logic - faster response generation
๐ Bug Fixes
- Fixed database constraints in tests by providing all required Media model fields
- Resolved Mockery conflicts by using direct model creation instead of complex mocking
- Improved error handling with proper HTTP status codes
๐ Documentation Updates
- Enhanced README with updated usage examples
- Comprehensive config comments explaining security implications
- Updated CHANGELOG with detailed migration instructions
- Added middleware documentation with best practices
๐ฎ Future Compatibility
This refactoring provides a solid foundation for:
- Custom validation rules - easily extendable middleware
- Additional media types - framework ready for new access patterns
- Advanced authorization - pluggable authorization strategies
- Performance optimizations - cacheable validation results
๐ Summary
This release represents a major architectural improvement that:
- โ Enhances security through dedicated middleware validation
- โ Improves maintainability with proper separation of concerns
- โ Follows Laravel conventions using middleware for request preprocessing
- โ Provides comprehensive testing with modern Pest PHP test suite
- โ Maintains backward compatibility for most use cases (with middleware addition)
The refactoring ensures that Laravel Media Secure continues to provide robust, secure media access control while following modern Laravel development practices.