Media Library - v1.0-beta1

Integration

This section covers integrating the Media Library with the Digital Shopfront CMS, setting up permissions, and customizing the package to fit your needs.

Integration Guides

CMS Module Integration

Integration with Digital Shopfront CMS:

  • Module overview and features
  • Admin pages (Library, Upload, Settings)
  • Settings integration and runtime overrides
  • Menu integration
  • Role and permission setup
  • Extending the module
  • Module structure
  • Testing

Permissions & Access Control

Capability-based permissions system:

  • Permission capabilities (view, upload, edit, delete)
  • Policy-based authorization
  • Setting up roles (Administrator, Editor, Author, Contributor)
  • Checking permissions (controllers, Blade, code)
  • Custom permission hooks
  • Ownership-based permissions
  • Folder permissions
  • API authentication
  • Testing permissions

Customization

Customizing the package for your needs:

  • Publishing assets (config, views, migrations)
  • Custom image sizes
  • Custom storage disks (S3, GCS, Azure)
  • Customizing views
  • Extending models
  • Custom upload processing
  • Custom validation rules
  • Hooks and filters
  • Custom Livewire components

Quick Integration Examples

Set Up Admin Role

use ArtisanPackUI\CMSFramework\Modules\Users\Models\Role;

$admin = Role::where('slug', 'administrator')->first();
$admin->capabilities = array_merge($admin->capabilities ?? [], [
    'media.view',
    'media.upload',
    'media.edit',
    'media.delete',
]);
$admin->save();

Register Custom Image Size

// In AppServiceProvider::boot()
apRegisterImageSize('product-thumbnail', 400, 400, true);
apRegisterImageSize('hero-banner', 1920, 600, true);

Configure S3 Storage

// config/filesystems.php
's3-media' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_MEDIA_BUCKET'),
],
# .env
MEDIA_DISK=s3-media

Custom Upload Hook

addAction('media.after_upload', function ($media) {
    // Send notification
    Notification::send($admins, new MediaUploadedNotification($media));
});

Next Steps