Skip to content

Commit 9845ec9

Browse files
committed
allow Asset model and resource to be overwritten & add middleware
1 parent 97fde91 commit 9845ec9

12 files changed

+78
-20
lines changed

config/filament-flexible-blocks-asset-manager.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
// config for Statik/FilamentFlexibleBlocksAssetManager
4+
45
return [
56
/*
67
|--------------------------------------------------------------------------
@@ -20,6 +21,16 @@
2021
*/
2122
'navigation_group' => null,
2223

24+
/*
25+
|--------------------------------------------------------------------------
26+
| Model & Resource
27+
|--------------------------------------------------------------------------
28+
|
29+
| You can override the model and resource that are used. Be sure to inherit from our defaults.
30+
*/
31+
'model' => \Statikbe\FilamentFlexibleBlocksAssetManager\Models\Asset::class,
32+
'resource' => \Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource::class,
33+
2334
/*
2435
|--------------------------------------------------------------------------
2536
| Image editor
@@ -93,12 +104,16 @@
93104
| You need to define a new model policy and add an extra function for the public
94105
| file access of the asset. The name of this function needs to be added to the key
95106
| 'gate'. The policy class needs to be added to the key 'policy'.
107+
| The middleware is only used for assets URLs. You can get the assetId in the middleware by
108+
| calling $request->route('assetId')
109+
|
96110
| see https://laravel.com/docs/11.x/authorization#gates and
97111
| https://laravel.com/docs/11.x/authorization#writing-policies
98112
*/
99113
'asset_authorisation' => [
100114
//'gate' => 'asset-access',
101115
//'policy' => AssetPolicy::class,
116+
//'middleware' => AssetRedirectMiddleware::class,
102117
],
103118

104119
/*

routes/filament-flexible-blocks-asset-manager.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
66
use Statikbe\FilamentFlexibleBlocksAssetManager\Http\Controllers\AssetController;
77

8+
$assetMiddleware = FilamentFlexibleBlocksAssetManagerConfig::getAssetMiddleware();
89
$assetRoutePrefix = FilamentFlexibleBlocksAssetManagerConfig::getAssetRoutePrefix();
910
$assetRoutePrefix = Str::replaceEnd('/', '', $assetRoutePrefix);
1011

11-
Route::get("$assetRoutePrefix/{asset}/{locale?}", [AssetController::class, 'index'])
12-
->middleware(['web'])
12+
Route::get("$assetRoutePrefix/{assetId}/{locale?}", [AssetController::class, 'index'])
13+
->middleware(['web', $assetMiddleware ?? ''])
1314
->name('filament-flexible-blocks-asset-manager.asset_index');

src/Filament/Form/Fields/Blocks/Type/AssetCallToActionType.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Form\Fields\Blocks\Type;
44

5+
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
56
use Statikbe\FilamentFlexibleBlocksAssetManager\Models\Asset;
67
use Statikbe\FilamentFlexibleContentBlocks\Filament\Form\Fields\Blocks\Type\CallToActionType;
78

@@ -12,7 +13,7 @@ protected function setUp(): void
1213
parent::setUp();
1314

1415
$this->titleColumnName('name');
15-
$this->model(Asset::class);
16+
$this->model(FilamentFlexibleBlocksAssetManagerConfig::getModel());
1617
$this->label(trans('filament-flexible-blocks-asset-manager::filament-flexible-blocks-asset-manager.asset_lbl'));
1718

1819
$this->searchColumns(['name']);

src/Filament/Resources/AssetResource.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,15 @@
1515
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource\Pages\EditAsset;
1616
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource\Pages\ListAssets;
1717
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
18-
use Statikbe\FilamentFlexibleBlocksAssetManager\Models\Asset;
1918

2019
class AssetResource extends Resource
2120
{
2221
use Translatable;
2322

24-
protected static ?string $model = Asset::class;
25-
2623
protected static ?string $navigationIcon = 'heroicon-o-photo';
2724

25+
protected static ?string $recordTitleAttribute = 'name';
26+
2827
public static function getNavigationLabel(): string
2928
{
3029
return trans('filament-flexible-blocks-asset-manager::filament-flexible-blocks-asset-manager.asset_nav_lbl');
@@ -40,20 +39,33 @@ public static function getPluralLabel(): string
4039
return trans('filament-flexible-blocks-asset-manager::filament-flexible-blocks-asset-manager.asset_plural_lbl');
4140
}
4241

42+
public static function getModel(): string
43+
{
44+
return FilamentFlexibleBlocksAssetManagerConfig::getModel();
45+
}
46+
4347
public static function getNavigationGroup(): ?string
4448
{
4549
return FilamentFlexibleBlocksAssetManagerConfig::getNavigationGroup();
4650
}
4751

52+
public static function getDefaultComponents(): array
53+
{
54+
return [
55+
AssetNameField::create(true),
56+
AssetMediaField::create(FilamentFlexibleBlocksAssetManagerConfig::hasTranslatableAssets())
57+
->required(),
58+
];
59+
}
60+
4861
public static function form(Form $form): Form
4962
{
5063
return $form
5164
->schema([
5265
Section::make()
5366
->columns(2)
5467
->schema([
55-
AssetNameField::create(true),
56-
AssetMediaField::create(FilamentFlexibleBlocksAssetManagerConfig::hasTranslatableAssets()),
68+
...static::getDefaultComponents(),
5769
]),
5870
]);
5971
}

src/Filament/Resources/AssetResource/Pages/CreateAsset.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Filament\Actions;
66
use Filament\Resources\Pages\CreateRecord;
77
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource;
8+
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
89
use Statikbe\FilamentFlexibleContentBlocks\Filament\Pages\CreateRecord\Concerns\TranslatableWithMedia;
910

1011
class CreateAsset extends CreateRecord
@@ -13,6 +14,11 @@ class CreateAsset extends CreateRecord
1314

1415
protected static string $resource = AssetResource::class;
1516

17+
public static function getResource(): string
18+
{
19+
return FilamentFlexibleBlocksAssetManagerConfig::getResource();
20+
}
21+
1622
protected function getHeaderActions(): array
1723
{
1824
return [

src/Filament/Resources/AssetResource/Pages/EditAsset.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Filament\Actions;
66
use Filament\Resources\Pages\EditRecord;
77
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource;
8+
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
89
use Statikbe\FilamentFlexibleContentBlocks\Filament\Pages\EditRecord\Concerns\TranslatableWithMedia;
910

1011
class EditAsset extends EditRecord
@@ -13,6 +14,11 @@ class EditAsset extends EditRecord
1314

1415
protected static string $resource = AssetResource::class;
1516

17+
public static function getResource(): string
18+
{
19+
return FilamentFlexibleBlocksAssetManagerConfig::getResource();
20+
}
21+
1622
protected function getHeaderActions(): array
1723
{
1824
return [

src/Filament/Resources/AssetResource/Pages/ListAssets.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
use Filament\Resources\Pages\ListRecords;
77
use Filament\Resources\Pages\ListRecords\Concerns\Translatable;
88
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource;
9+
use Statikbe\FilamentFlexibleBlocksAssetManager\FilamentFlexibleBlocksAssetManagerConfig;
910

1011
class ListAssets extends ListRecords
1112
{
1213
use Translatable;
1314

1415
protected static string $resource = AssetResource::class;
1516

17+
public static function getResource(): string
18+
{
19+
return FilamentFlexibleBlocksAssetManagerConfig::getResource();
20+
}
21+
1622
protected function getHeaderActions(): array
1723
{
1824
return [

src/FilamentFlexibleBlocksAssetManagerConfig.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ public static function getAssetAuthorisationPolicy(): ?string
1919
return self::getConfig('asset_authorisation.policy');
2020
}
2121

22+
public static function getAssetMiddleware(): ?string
23+
{
24+
return self::getConfig('asset_authorisation.middleware');
25+
}
26+
2227
public static function getStorageDisk(): ?string
2328
{
2429
return self::getConfig('storage_disk');
@@ -49,6 +54,16 @@ public static function getNavigationGroup(): ?string
4954
return self::getConfig('navigation_group');
5055
}
5156

57+
public static function getModel(): ?string
58+
{
59+
return self::getConfig('model');
60+
}
61+
62+
public static function getResource(): ?string
63+
{
64+
return self::getConfig('resource');
65+
}
66+
5267
public static function getAssetRoutePrefix(): ?string
5368
{
5469
return self::getConfig('asset_route_prefix', '/asset');

src/FilamentFlexibleBlocksAssetManagerPlugin.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Filament\Contracts\Plugin;
66
use Filament\Panel;
7-
use Statikbe\FilamentFlexibleBlocksAssetManager\Filament\Resources\AssetResource;
87

98
class FilamentFlexibleBlocksAssetManagerPlugin implements Plugin
109
{
@@ -16,7 +15,7 @@ public function getId(): string
1615
public function register(Panel $panel): void
1716
{
1817
$panel->resources([
19-
AssetResource::class,
18+
FilamentFlexibleBlocksAssetManagerConfig::getResource(),
2019
]);
2120
}
2221

src/FilamentFlexibleBlocksAssetManagerServiceProvider.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
namespace Statikbe\FilamentFlexibleBlocksAssetManager;
44

5-
use Filament\Support\Assets\AlpineComponent;
65
use Filament\Support\Assets\Asset;
7-
use Filament\Support\Assets\Css;
8-
use Filament\Support\Assets\Js;
96
use Filament\Support\Facades\FilamentAsset;
107
use Filament\Support\Facades\FilamentIcon;
118
use Illuminate\Database\Eloquent\Relations\Relation;
@@ -15,7 +12,6 @@
1512
use Spatie\LaravelPackageTools\Commands\InstallCommand;
1613
use Spatie\LaravelPackageTools\Package;
1714
use Spatie\LaravelPackageTools\PackageServiceProvider;
18-
use Statikbe\FilamentFlexibleBlocksAssetManager\Models\Asset as AssetModel;
1915
use Statikbe\FilamentFlexibleBlocksAssetManager\Testing\TestsLaravelFilamentFlexibleBlocksAssetManager;
2016

2117
class FilamentFlexibleBlocksAssetManagerServiceProvider extends PackageServiceProvider
@@ -95,13 +91,13 @@ public function packageBooted(): void
9591

9692
//add Asset to morph map when used:
9793
Relation::morphMap([
98-
'filament-flexible-blocks-asset-manager::asset' => AssetModel::class,
94+
'filament-flexible-blocks-asset-manager::asset' => FilamentFlexibleBlocksAssetManagerConfig::getModel(),
9995
], true);
10096

10197
//add policies
10298
if (FilamentFlexibleBlocksAssetManagerConfig::getAssetAuthorisationPolicy()) {
10399
Gate::policy(
104-
\Statikbe\FilamentFlexibleBlocksAssetManager\Models\Asset::class,
100+
FilamentFlexibleBlocksAssetManagerConfig::getModel(),
105101
FilamentFlexibleBlocksAssetManagerConfig::getAssetAuthorisationPolicy()
106102
);
107103
}

0 commit comments

Comments
 (0)