Skip to content

Commit cda2bcf

Browse files
Created Role Resource with Relation Manager
1 parent 4daa8ed commit cda2bcf

File tree

5 files changed

+189
-0
lines changed

5 files changed

+189
-0
lines changed
+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace App\Filament\Resources;
4+
5+
use Filament\Forms;
6+
use Filament\Tables;
7+
use Filament\Resources\Form;
8+
use Filament\Resources\Table;
9+
use Filament\Resources\Resource;
10+
use Spatie\Permission\Models\Role;
11+
use Filament\Forms\Components\Card;
12+
use Filament\Tables\Columns\TextColumn;
13+
use Filament\Forms\Components\TextInput;
14+
use Filament\Tables\Actions\DeleteAction;
15+
use Illuminate\Database\Eloquent\Builder;
16+
use App\Filament\Resources\RoleResource\Pages;
17+
use Illuminate\Database\Eloquent\SoftDeletingScope;
18+
use App\Filament\Resources\RoleResource\RelationManagers;
19+
use App\Filament\Resources\RoleResource\RelationManagers\PermissionsRelationManager;
20+
use Filament\Forms\Components\MultiSelect;
21+
22+
class RoleResource extends Resource
23+
{
24+
protected static ?string $model = Role::class;
25+
26+
protected static ?string $navigationIcon = 'heroicon-s-cog';
27+
28+
protected static ?string $navigationGroup = 'Admin Management';
29+
30+
public static function form(Form $form): Form {
31+
return $form
32+
->schema([
33+
Card::make()
34+
->schema([
35+
TextInput::make('name')
36+
->unique(ignoreRecord: true)
37+
->required(),
38+
MultiSelect::make('permissions')
39+
->relationship('permissions', 'name')
40+
->preload()
41+
->required()
42+
])
43+
]);
44+
}
45+
46+
public static function table(Table $table): Table {
47+
return $table
48+
->columns([
49+
TextColumn::make('id')->sortable(),
50+
TextColumn::make('name')->sortable()->searchable(),
51+
TextColumn::make('created_at')
52+
->dateTime('d-M-Y')
53+
->sortable()
54+
->searchable(),
55+
])
56+
->filters([
57+
//
58+
])
59+
->actions([
60+
Tables\Actions\EditAction::make(),
61+
DeleteAction::make(),
62+
])
63+
->bulkActions([
64+
Tables\Actions\DeleteBulkAction::make(),
65+
]);
66+
}
67+
68+
public static function getRelations(): array {
69+
return [
70+
PermissionsRelationManager::class,
71+
];
72+
}
73+
74+
public static function getPages(): array
75+
{
76+
return [
77+
'index' => Pages\ListRoles::route('/'),
78+
'create' => Pages\CreateRole::route('/create'),
79+
'edit' => Pages\EditRole::route('/{record}/edit'),
80+
];
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\RoleResource\Pages;
4+
5+
use App\Filament\Resources\RoleResource;
6+
use Filament\Pages\Actions;
7+
use Filament\Resources\Pages\CreateRecord;
8+
9+
class CreateRole extends CreateRecord
10+
{
11+
protected static string $resource = RoleResource::class;
12+
13+
protected function getRedirectUrl(): string {
14+
return $this->getResource()::getUrl('index');
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\RoleResource\Pages;
4+
5+
use App\Filament\Resources\RoleResource;
6+
use Filament\Pages\Actions;
7+
use Filament\Resources\Pages\EditRecord;
8+
9+
class EditRole extends EditRecord
10+
{
11+
protected static string $resource = RoleResource::class;
12+
13+
protected function getActions(): array
14+
{
15+
return [
16+
Actions\DeleteAction::make(),
17+
];
18+
}
19+
20+
protected function getRedirectUrl(): string {
21+
return $this->getResource()::getUrl('index');
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\RoleResource\Pages;
4+
5+
use App\Filament\Resources\RoleResource;
6+
use Filament\Pages\Actions;
7+
use Filament\Resources\Pages\ListRecords;
8+
9+
class ListRoles extends ListRecords
10+
{
11+
protected static string $resource = RoleResource::class;
12+
13+
protected function getActions(): array
14+
{
15+
return [
16+
Actions\CreateAction::make(),
17+
];
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\RoleResource\RelationManagers;
4+
5+
use Filament\Forms;
6+
use Filament\Resources\Form;
7+
use Filament\Resources\RelationManagers\RelationManager;
8+
use Filament\Resources\Table;
9+
use Filament\Tables;
10+
use Illuminate\Database\Eloquent\Builder;
11+
use Illuminate\Database\Eloquent\SoftDeletingScope;
12+
13+
class PermissionsRelationManager extends RelationManager
14+
{
15+
protected static string $relationship = 'permissions';
16+
17+
protected static ?string $recordTitleAttribute = 'name';
18+
19+
public static function form(Form $form): Form
20+
{
21+
return $form
22+
->schema([
23+
Forms\Components\TextInput::make('name')
24+
->required()
25+
->maxLength(255),
26+
]);
27+
}
28+
29+
public static function table(Table $table): Table
30+
{
31+
return $table
32+
->columns([
33+
Tables\Columns\TextColumn::make('name'),
34+
])
35+
->filters([
36+
//
37+
])
38+
->headerActions([
39+
Tables\Actions\CreateAction::make(),
40+
])
41+
->actions([
42+
Tables\Actions\EditAction::make(),
43+
Tables\Actions\DeleteAction::make(),
44+
])
45+
->bulkActions([
46+
Tables\Actions\DeleteBulkAction::make(),
47+
]);
48+
}
49+
}

0 commit comments

Comments
 (0)