12-06-2025
1.Install Package
composer require bezhansalleh/filament-shield
2. Publish Config
php artisan vendor:publish --tag="filament-shield-config"
3. Add hasRoles traits on User model
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasRoles;
}
4. Setup Shield
php artisan shield:setup
5. Register FilamentShieldPlugin on app/Providers/Filament/AdminPanelProvider.php
use BezhanSalleh\FilamentShield\FilamentShieldPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
FilamentShieldPlugin::make(),
]);
}
}
6. Generate Policies for access
php artisan shield:generate --all
1.Generate UserResources
php artisan make:filament-resource User --generate
2. Implement HasShieldPermissions
use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions;
class UserResource extends Resource implements HasShieldPermissions{
public static function getPermissionPrefixes(): array
{
return [
'view',
'view_any',
'create',
'update',
'delete',
'delete_any',
];
}
}
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Section::make('Roles & Permissions')
->schema([
Forms\Components\Select::make('roles')
->relationship('roles', 'name')
->multiple()
->preload()
->searchable()
->optionsLimit(50)
->helperText('Select roles for this user'),
])
->collapsible(),
]);
}
4. Add role information on table
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('roles.name')
->badge()
->separator(',')
->color('success')
->searchable(),
]);
}
notes: run this when create new resources
php artisan shield:generate --all