Skip to content

Added Media Access Middleware

Latest

Choose a tag to compare

@nasrulhazim nasrulhazim released this 24 Aug 04:31
· 1 commit to main since this release

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 ValidateMediaAccess for 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::class added 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

  1. Media access type validation - ensures only valid types (view/download/stream) are accepted
  2. Media existence verification - validates media exists before authorization
  3. User authorization - checks user permissions via MediaPolicy
  4. 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

  1. 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]);
  1. Register the middleware in your app/Http/Kernel.php if using custom route definitions:
protected $routeMiddleware = [
    // ... other middleware
    'validate-media-access' => \CleaniqueCoders\LaravelMediaSecure\Http\Middleware\ValidateMediaAccess::class,
];
  1. 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.