Skip to content

Commit

Permalink
fix(filament): fixed actions policies (#687)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kyrch authored Jun 2, 2024
1 parent 80e48e5 commit d4dea63
Show file tree
Hide file tree
Showing 22 changed files with 105 additions and 36 deletions.
1 change: 0 additions & 1 deletion app/Filament/Components/Columns/TextColumn.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public function urlToRelated(string $resourceRelated, string $relation, ?bool $s
return $this
->weight(FontWeight::SemiBold)
->html()
->hiddenOn(BaseRelationManager::class)
->url(function (BaseModel $record) use ($resourceRelated, $relation, $shouldUseName, $limit) {
foreach (explode('.', $relation) as $element) {
$record = Arr::get($record, $element);
Expand Down
3 changes: 2 additions & 1 deletion app/Filament/Resources/Admin/Dump.php
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,8 @@ public static function getHeaderActions(): array
PruneDumpTableAction::make('prune-dump')
->label(__('filament.actions.dump.prune.name'))
->icon(__('filament.table_actions.dump.prune.icon'))
->requiresConfirmation(),
->requiresConfirmation()
->authorize('delete', DumpModel::class),

ReconcileDumpTableAction::make('reconcile-dump')
->label(__('filament.actions.repositories.name', ['label' => __('filament.resources.label.dumps')]))
Expand Down
27 changes: 20 additions & 7 deletions app/Filament/Resources/Base/BaseEditResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

namespace App\Filament\Resources\Base;

use Filament\Actions\DeleteAction as ActionsDeleteAction;
use Filament\Actions\ForceDeleteAction as ActionsForceDeleteAction;
use Filament\Actions\RestoreAction as ActionsRestoreAction;
use Filament\Actions\ActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\RestoreAction;
use Filament\Actions\ViewAction;
use Filament\Resources\Pages\EditRecord;

Expand All @@ -25,10 +26,22 @@ abstract class BaseEditResource extends EditRecord
protected function getHeaderActions(): array
{
return [
ViewAction::make(),
ActionsDeleteAction::make(),
ActionsForceDeleteAction::make(),
ActionsRestoreAction::make(),
ViewAction::make()
->label(__('filament.actions.base.view')),

ActionGroup::make([
DeleteAction::make()
->label(__('filament.actions.base.delete')),

ForceDeleteAction::make()
->label(__('filament.actions.base.forcedelete'))
->visible(true),
])
->icon('heroicon-o-trash')
->color('danger'),

RestoreAction::make()
->label(__('filament.actions.base.restore')),
];
}
}
26 changes: 18 additions & 8 deletions app/Filament/Resources/BaseResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use App\Models\BaseModel;
use Filament\Infolists\Components\TextEntry;
use Filament\Resources\Resource;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\BulkActionGroup;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\DeleteBulkAction;
Expand Down Expand Up @@ -121,11 +122,16 @@ public static function getActions(): array
EditAction::make()
->label(__('filament.actions.base.edit')),

DeleteAction::make()
->label(__('filament.actions.base.delete')),
ActionGroup::make([
DeleteAction::make()
->label(__('filament.actions.base.delete')),

ForceDeleteAction::make()
->label(__('filament.actions.base.forcedelete')),
ForceDeleteAction::make()
->label(__('filament.actions.base.forcedelete'))
->visible(true),
])
->icon('heroicon-o-trash')
->color('danger'),

RestoreAction::make()
->label(__('filament.actions.base.restore')),
Expand All @@ -144,13 +150,17 @@ public static function getBulkActions(): array
return [
BulkActionGroup::make([
DeleteBulkAction::make()
->label(__('filament.bulk_actions.base.delete')),
->label(__('filament.bulk_actions.base.delete'))
->authorize('delete', (new static::$model)),

ForceDeleteBulkAction::make()
->label(__('filament.bulk_actions.base.forcedelete')),
->label(__('filament.bulk_actions.base.forcedelete'))
->hidden(false)
->authorize('forcedelete', (new static::$model)),

RestoreBulkAction::make()
->label(__('filament.bulk_actions.base.restore')),
->label(__('filament.bulk_actions.base.restore'))
->authorize('restore', (new static::$model)),
]),
];
}
Expand Down Expand Up @@ -181,4 +191,4 @@ protected static function getDefaultSlug(): string
{
return 'resources/';
}
}
}
3 changes: 2 additions & 1 deletion app/Filament/Resources/Document/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public static function form(Form $form): Form
->label(__('filament.fields.page.slug.name'))
->helperText(__('filament.fields.page.slug.help'))
->required()
->unique(PageModel::class, PageModel::ATTRIBUTE_SLUG, ignoreRecord: true)
->maxLength(192)
->regex('/^[\pL\pM\pN\/_-]+$/u')
->rules([
Expand All @@ -142,7 +143,7 @@ public static function form(Form $form): Form
? Rule::unique(PageModel::class)
->ignore($record->getKey(), PageModel::ATTRIBUTE_ID)
->__toString()
: null,
: Rule::unique(PageModel::class)->__toString(),
]
]),

Expand Down
2 changes: 2 additions & 0 deletions app/Filament/Resources/List/Playlist/Track.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use App\Filament\Components\Infolist\TextEntry;
use App\Filament\Resources\BaseResource;
use App\Filament\Resources\List\Playlist as PlaylistResource;
use App\Filament\Resources\List\Playlist\RelationManagers\TrackPlaylistRelationManager;
use App\Filament\Resources\List\Playlist\Track\Pages\CreateTrack;
use App\Filament\Resources\List\Playlist\Track\Pages\EditTrack;
use App\Filament\Resources\List\Playlist\Track\Pages\ListTracks;
Expand Down Expand Up @@ -166,6 +167,7 @@ public static function table(Table $table): Table
TextColumn::make(TrackModel::RELATION_PLAYLIST.'.'.PlaylistModel::ATTRIBUTE_NAME)
->label(__('filament.resources.singularLabel.playlist'))
->toggleable()
->hiddenOn(TrackPlaylistRelationManager::class)
->urlToRelated(PlaylistResource::class, TrackModel::RELATION_PLAYLIST),

TextColumn::make(TrackModel::RELATION_VIDEO.'.'.VideoModel::ATTRIBUTE_FILENAME)
Expand Down
6 changes: 4 additions & 2 deletions app/Filament/Resources/Wiki/Anime.php
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ public static function form(Form $form): Form
->label(__('filament.fields.anime.slug.name'))
->helperText(__('filament.fields.anime.slug.help'))
->required()
->unique(AnimeModel::class, AnimeModel::ATTRIBUTE_SLUG, ignoreRecord: true)
->rules([
fn ($record) => [
'required',
Expand All @@ -190,7 +191,7 @@ public static function form(Form $form): Form
? Rule::unique(AnimeModel::class)
->ignore($record->getKey(), AnimeModel::ATTRIBUTE_ID)
->__toString()
: null,
: Rule::unique(AnimeModel::class)->__toString(),
]
]),

Expand Down Expand Up @@ -290,7 +291,8 @@ public static function table(Table $table): Table

TextColumn::make(AnimeResource::ATTRIBUTE_AS)
->label(__('filament.fields.anime.resources.as.name'))
->visibleOn(AnimeResourceRelationManager::class),
->visibleOn(AnimeResourceRelationManager::class)
->placeholder('-'),
])
->searchable()
->defaultSort(AnimeModel::ATTRIBUTE_ID, 'desc')
Expand Down
2 changes: 2 additions & 0 deletions app/Filament/Resources/Wiki/Anime/Synonym.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use App\Filament\Resources\BaseRelationManager;
use App\Filament\Resources\BaseResource;
use App\Filament\Resources\Wiki\Anime as AnimeResource;
use App\Filament\Resources\Wiki\Anime\RelationManagers\SynonymAnimeRelationManager;
use App\Filament\Resources\Wiki\Anime\Synonym\Pages\CreateSynonym;
use App\Filament\Resources\Wiki\Anime\Synonym\Pages\EditSynonym;
use App\Filament\Resources\Wiki\Anime\Synonym\Pages\ListSynonyms;
Expand Down Expand Up @@ -163,6 +164,7 @@ public static function table(Table $table): Table
TextColumn::make(SynonymModel::RELATION_ANIME.'.'.AnimeModel::ATTRIBUTE_NAME)
->label(__('filament.resources.singularLabel.anime'))
->toggleable()
->hiddenOn(SynonymAnimeRelationManager::class)
->urlToRelated(AnimeResource::class, SynonymModel::RELATION_ANIME, limit: 40)
->tooltip(fn (TextColumn $column) => $column->getState()),

Expand Down
4 changes: 4 additions & 0 deletions app/Filament/Resources/Wiki/Anime/Theme.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
use App\Filament\Resources\BaseRelationManager;
use App\Filament\Resources\BaseResource;
use App\Filament\Resources\Wiki\Anime as AnimeResource;
use App\Filament\Resources\Wiki\Anime\RelationManagers\ThemeAnimeRelationManager;
use App\Filament\Resources\Wiki\Anime\Theme\Pages\CreateTheme;
use App\Filament\Resources\Wiki\Anime\Theme\Pages\EditTheme;
use App\Filament\Resources\Wiki\Anime\Theme\Pages\ListThemes;
use App\Filament\Resources\Wiki\Anime\Theme\Pages\ViewTheme;
use App\Filament\Resources\Wiki\Anime\Theme\RelationManagers\EntryThemeRelationManager;
use App\Filament\Resources\Wiki\Group as GroupResource;
use App\Filament\Resources\Wiki\Song as SongResource;
use App\Filament\Resources\Wiki\Song\RelationManagers\ThemeSongRelationManager;
use App\Models\Wiki\Anime as AnimeModel;
use App\Models\Wiki\Anime\AnimeTheme as ThemeModel;
use App\Models\Wiki\Group;
Expand Down Expand Up @@ -219,6 +221,7 @@ public static function table(Table $table): Table
TextColumn::make(ThemeModel::RELATION_ANIME.'.'.AnimeModel::ATTRIBUTE_NAME)
->label(__('filament.resources.singularLabel.anime'))
->toggleable()
->hiddenOn(ThemeAnimeRelationManager::class)
->urlToRelated(AnimeResource::class, ThemeModel::RELATION_ANIME, limit: 30)
->tooltip(fn (TextColumn $column) => $column->getState()),

Expand Down Expand Up @@ -253,6 +256,7 @@ public static function table(Table $table): Table
->label(__('filament.resources.singularLabel.song'))
->toggleable()
->placeholder('-')
->hiddenOn(ThemeSongRelationManager::class)
->urlToRelated(SongResource::class, ThemeModel::RELATION_SONG, limit: 30)
->tooltip(fn (TextColumn $column) => $column->getState()),
])
Expand Down
3 changes: 2 additions & 1 deletion app/Filament/Resources/Wiki/Anime/Theme/Entry.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use App\Filament\Resources\Wiki\Anime\Theme\Entry\Pages\ListEntries;
use App\Filament\Resources\Wiki\Anime\Theme\Entry\Pages\ViewEntry;
use App\Filament\Resources\Wiki\Anime\Theme\Entry\RelationManagers\VideoEntryRelationManager;
use App\Filament\Resources\Wiki\Anime\Theme\RelationManagers\EntryThemeRelationManager;
use App\Models\Wiki\Anime as AnimeModel;
use App\Models\Wiki\Anime\AnimeTheme as ThemeModel;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry as EntryModel;
Expand All @@ -32,7 +33,6 @@
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Log;

/**
* Class Entry.
Expand Down Expand Up @@ -241,6 +241,7 @@ public static function table(Table $table): Table
->label(__('filament.resources.singularLabel.anime_theme'))
->toggleable()
->placeholder('-')
->hiddenOn(EntryThemeRelationManager::class)
->urlToRelated(ThemeResource::class, EntryModel::RELATION_THEME, true),

TextColumn::make(EntryModel::ATTRIBUTE_ID)
Expand Down
17 changes: 15 additions & 2 deletions app/Filament/Resources/Wiki/Artist.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@
use App\Filament\Resources\Wiki\Artist\RelationManagers\ResourceArtistRelationManager;
use App\Filament\Resources\Wiki\Artist\RelationManagers\SongArtistRelationManager;
use App\Filament\Resources\Wiki\ExternalResource\RelationManagers\ArtistResourceRelationManager;
use App\Filament\Resources\Wiki\Song\RelationManagers\ArtistSongRelationManager;
use App\Models\Wiki\Artist as ArtistModel;
use App\Pivots\Wiki\ArtistResource;
use App\Pivots\Wiki\ArtistSong;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Set;
Expand Down Expand Up @@ -169,23 +171,29 @@ public static function form(Form $form): Form
->helperText(__('filament.fields.artist.slug.help'))
->required()
->maxLength(192)
->unique(ArtistModel::class, ArtistModel::ATTRIBUTE_SLUG, ignoreRecord: true)
->rules([
fn ($record) => [
'required',
'max:192',
'alpha_dash',
$record !== null
$record instanceof ArtistModel
? Rule::unique(ArtistModel::class)
->ignore($record->getKey(), ArtistModel::ATTRIBUTE_ID)
->__toString()
: null,
: Rule::unique(ArtistModel::class)->__toString(),
]
]),

TextInput::make(ArtistResource::ATTRIBUTE_AS)
->label(__('filament.fields.artist.resources.as.name'))
->helperText(__('filament.fields.artist.resources.as.help'))
->visibleOn(ArtistResourceRelationManager::class),

TextInput::make(ArtistSong::ATTRIBUTE_AS)
->label(__('filament.fields.artist.songs.as.name'))
->helperText(__('filament.fields.artist.songs.as.help'))
->visibleOn(ArtistSongRelationManager::class),
])
->columns(2);
}
Expand Down Expand Up @@ -221,6 +229,11 @@ public static function table(Table $table): Table
->label(__('filament.fields.artist.resources.as.name'))
->visibleOn(ArtistResourceRelationManager::class)
->placeholder('-'),

TextColumn::make(ArtistSong::ATTRIBUTE_AS)
->label(__('filament.fields.artist.songs.as.name'))
->visibleOn(ArtistSongRelationManager::class)
->placeholder('-'),
])
->searchable()
->defaultSort(ArtistModel::ATTRIBUTE_ID, 'desc')
Expand Down
3 changes: 2 additions & 1 deletion app/Filament/Resources/Wiki/ExternalResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,8 @@ public static function table(Table $table): Table

TextColumn::make(AnimeResource::ATTRIBUTE_AS)
->label(__('filament.fields.anime.resources.as.name'))
->visibleOn(BaseRelationManager::class),
->visibleOn(BaseRelationManager::class)
->placeholder('-'),
])
->defaultSort(ExternalResourceModel::ATTRIBUTE_ID, 'desc')
->filters(static::getFilters())
Expand Down
3 changes: 2 additions & 1 deletion app/Filament/Resources/Wiki/Group.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ public static function form(Form $form): Form
->helperText(__('filament.fields.group.slug.help'))
->required()
->maxLength(192)
->unique(GroupModel::class, GroupModel::ATTRIBUTE_SLUG, ignoreRecord: true)
->rules([
fn ($record) => [
'required',
Expand All @@ -150,7 +151,7 @@ public static function form(Form $form): Form
? Rule::unique(GroupModel::class)
->ignore($record->getKey(), GroupModel::ATTRIBUTE_ID)
->__toString()
: null,
: Rule::unique(GroupModel::class)->__toString(),
]
]),
])
Expand Down
3 changes: 2 additions & 1 deletion app/Filament/Resources/Wiki/Series.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ public static function form(Form $form): Form
->helperText(__('filament.fields.series.slug.help'))
->required()
->maxLength(192)
->unique(SeriesModel::class, SeriesModel::ATTRIBUTE_SLUG, ignoreRecord: true)
->rules([
fn ($record) => [
'required',
Expand All @@ -166,7 +167,7 @@ public static function form(Form $form): Form
? Rule::unique(SeriesModel::class)
->ignore($record->getKey(), SeriesModel::ATTRIBUTE_ID)
->__toString()
: null,
: Rule::unique(SeriesModel::class)->__toString(),
]
]),
])
Expand Down
17 changes: 16 additions & 1 deletion app/Filament/Resources/Wiki/Song.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use App\Filament\Components\Columns\TextColumn;
use App\Filament\Components\Infolist\TextEntry;
use App\Filament\Resources\BaseResource;
use App\Filament\Resources\Wiki\Artist\RelationManagers\SongArtistRelationManager;
use App\Filament\Resources\Wiki\ExternalResource\RelationManagers\SongResourceRelationManager;
use App\Filament\Resources\Wiki\Song\Pages\CreateSong;
use App\Filament\Resources\Wiki\Song\Pages\EditSong;
Expand All @@ -18,6 +19,7 @@
use App\Filament\Resources\Wiki\Song\RelationManagers\ResourceSongRelationManager;
use App\Filament\Resources\Wiki\Song\RelationManagers\ThemeSongRelationManager;
use App\Models\Wiki\Song as SongModel;
use App\Pivots\Wiki\ArtistSong;
use App\Pivots\Wiki\SongResource;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
Expand Down Expand Up @@ -160,6 +162,12 @@ public static function form(Form $form): Form
->helperText(__('filament.fields.song.resources.as.help'))
->visibleOn(SongResourceRelationManager::class)
->placeholder('-'),

TextInput::make(ArtistSong::ATTRIBUTE_AS)
->label(__('filament.fields.artist.songs.as.name'))
->helperText(__('filament.fields.artist.songs.as.help'))
->visibleOn(SongArtistRelationManager::class)
->placeholder('-'),
]);
}

Expand Down Expand Up @@ -188,7 +196,14 @@ public static function table(Table $table): Table
TextColumn::make(SongResource::ATTRIBUTE_AS)
->label(__('filament.fields.song.resources.as.name'))
->visibleOn(SongResourceRelationManager::class)
->toggleable(),
->toggleable()
->placeholder('-'),

TextColumn::make(ArtistSong::ATTRIBUTE_AS)
->label(__('filament.fields.artist.songs.as.name'))
->visibleOn(SongArtistRelationManager::class)
->toggleable()
->placeholder('-'),
])
->searchable()
->defaultSort(SongModel::ATTRIBUTE_ID, 'desc')
Expand Down
Loading

0 comments on commit d4dea63

Please sign in to comment.