PHP code example of agroezinger / filament-shield-enhanced
1. Go to this page and download the library: Download agroezinger/filament-shield-enhanced library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
agroezinger / filament-shield-enhanced example snippets
namespace App\Filament\Pages;
use Agroezinger\FilamentShieldEnhanced\Traits\HasPageShield;
use Filament\Pages\Page;
class SettingsPage extends Page
{
use HasPageShield;
/**
* Declare every action that can be independently granted on this page.
* The 'view' action controls whether the user can navigate to the page at all.
*
* Three entry formats can be mixed freely:
*
* 'action' → label auto-generated from action name
* 'action' => 'Label' → explicit label
* 'action' => ['text' => 'Label',
* 'description' => 'Shown below the checkbox in the role editor']
*/
public static function getShieldPagePermissions(): array
{
return [
'view' => 'Can view this page',
'editGlobalSettings' => [
'text' => 'Can change global settings',
'description' => 'Grants access to all fields in the Global Settings section.',
],
'exportData' => 'Can export data as CSV / Excel',
];
}
}
// Inside the Page class
if ($this->canShield('editGlobalSettings')) {
// Perform restricted action
}
namespace App\Livewire;
use Agroezinger\FilamentShieldEnhanced\Traits\HasInjectedShieldPermissions;
use Livewire\Component;
class SettingsSidebar extends Component
{
use HasInjectedShieldPermissions;
// $this->permissions is automatically populated by Livewire.
public function save(): void
{
$this->authorizeShield('editGlobalSettings'); // aborts 403 if not permitted
// … save logic
}
public function render()
{
return view('livewire.settings-sidebar');
}
}
namespace App\Filament\Resources;
use Agroezinger\FilamentShieldEnhanced\Traits\HasResourceShield;
use App\Models\Member;
use Filament\Resources\Resource;
class MemberResource extends Resource
{
use HasResourceShield;
protected static ?string $model = Member::class;
/**
* Declare custom permissions beyond the standard CRUD policy methods.
* Keys are action names; values are human-readable labels (shown in the role editor).
*
* Same three entry formats as getShieldPagePermissions():
* 'action' → auto-generated label
* 'action' => 'Label' → explicit label
* 'action' => ['text' => '...', 'description' => '...']
*/
public static function getShieldResourcePermissions(): array
{
return [
'Export' => 'Export member list (basic data)',
'ExportFinance' => 'Export member list including financial data (IBAN, fees)',
'ViewContactInfo' => 'View contact details (email, phone, address)',
'ViewBankingInfo' => 'View bank details (IBAN, BIC, account holder)',
];
}
}
// Anywhere in your application
if (MemberResource::canShield('ViewContactInfo')) {
// show contact section
}
// Returns ['Export' => true, 'ViewContactInfo' => false, …]
$permissions = MemberResource::getShieldPermissions();
use Agroezinger\FilamentShieldEnhanced\Forms\EnhancedPagePermissionsForm;
use Agroezinger\FilamentShieldEnhanced\Forms\EnhancedResourcePermissionsForm;
use BezhanSalleh\FilamentShield\Facades\FilamentShield;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
/**
* Exclude pages that declare getShieldPagePermissions() from the standard
* "Pages" tab — they are managed exclusively by the Enhanced tab.
*/
public static function getPageOptions(): array
{
return collect(FilamentShield::getPages())
->reject(fn(array $page) => method_exists($page['pageFqcn'], 'getShieldPagePermissions'))
->flatMap(fn(array $page) => $page['permissions'])
->toArray();
}
public static function getShieldFormComponents(): \Filament\Schemas\Components\Component
{
$enhancedPageComponents = EnhancedPagePermissionsForm::make();
$enhancedPageCount = count(EnhancedPagePermissionsForm::getPagePermissionFields());
$enhancedResourceComponents = EnhancedResourcePermissionsForm::make();
$enhancedResourceCount = count(EnhancedResourcePermissionsForm::getResourcePermissionFields());
$tabs = [
static::getTabFormComponentForResources(),
static::getTabFormComponentForPage(),
static::getTabFormComponentForWidget(),
static::getTabFormComponentForCustomPermissions(),
];
if (! empty($enhancedResourceComponents)) {
$tabs[] = Tab::make('enhanced_resources')
->label('Resources (Fine-grained)')
->badge($enhancedResourceCount ?: null)
->schema($enhancedResourceComponents);
}
if (! empty($enhancedPageComponents)) {
$tabs[] = Tab::make('enhanced_pages')
->label('Pages (Fine-grained)')
->badge($enhancedPageCount ?: null)
->schema($enhancedPageComponents);
}
return Tabs::make('Permissions')
->contained()
->tabs($tabs)
->columnSpan('full');
}
use Agroezinger\FilamentShieldEnhanced\Traits\HasEnhancedRoleForm;
class EditRole extends EditRecord
{
use HasEnhancedRoleForm;
// … rest of the file unchanged
}