1. Go to this page and download the library: Download coringawc/filament-acl 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/ */
coringawc / filament-acl example snippets
use CoringaWc\FilamentAcl\FilamentAclPlugin;
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(
FilamentAclPlugin::make()
->scopeRolesByPanel()
->scopePermissionsByPanel()
);
}
use CoringaWc\FilamentAcl\Resources\Concerns\HasResourcePermissions;
use Filament\Resources\Resource;
class PostResource extends Resource
{
use HasResourcePermissions;
}
use CoringaWc\FilamentAcl\RelationManagers\Concerns\HasRelationManagerPermissions;
use Filament\Resources\RelationManagers\RelationManager;
class PostsRelationManager extends RelationManager
{
use HasRelationManagerPermissions;
}
public static function shouldUseRelatedResourcePermissions(): bool
{
return false; // keep own permissions even when the global default is true
}
use CoringaWc\FilamentAcl\Pages\Concerns\HasPagePermissions;
use Filament\Pages\Page;
class ContentInsightsPage extends Page
{
use HasPagePermissions;
}
use CoringaWc\FilamentAcl\Widgets\Concerns\HasWidgetPermissions;
use Filament\Widgets\Widget;
class PostsOverviewWidget extends Widget
{
use HasWidgetPermissions;
}
public static function getPermissionSubject(): ?string
{
return 'WalletTenantContractingProcesses';
}
/**
* @return array<int, string>
*/
public static function getPermissionCustomActions(): array
{
return ['advanceStatus', 'archive'];
}
/**
* @return array<int, string>
*/
public static function getPermissionActions(): array
{
return array_values(array_unique([
...app(DefaultPermissionActionRegistry::class)->forResource(),
...static::getPermissionCustomActions(),
]));
}
use CoringaWc\FilamentAcl\Attributes\PermissionActions;
#[PermissionActions(['view'])]
class MyWalletResource extends Resource
{
use HasResourcePermissions;
}
public static function shouldRegisterPermissions(): bool
{
return false;
}
use CoringaWc\FilamentAcl\Attributes\RegisterPermissions;
#[RegisterPermissions(false)]
class InternalOnlyResource extends Resource
{
use HasResourcePermissions;
}
/**
* @return class-string|null
*/
public static function getSharedPermissionOwner(): ?string
{
return CategoryResource::class;
}
public static function getPermissionPanel(): ?string
{
return 'app';
}
use CoringaWc\FilamentAcl\Policies\Concerns\ChecksPermission;
use CoringaWc\FilamentAcl\Support\PermissionAction;
use Illuminate\Auth\Access\Response;
use Workbench\App\Models\Post;
class PostPolicy
{
use ChecksPermission;
public function update(
mixed $user,
Post $record,
PermissionAction | string | null $permissionAction = null,
): Response {
if ($response = $this->denyUnlessPermitted($user, 'update', $permissionAction)) {
return $response;
}
if ($record->status === 'archived') {
return Response::deny('Archived posts cannot be updated.');
}
return Response::allow();
}
}
public function viewAny(
mixed $user,
PermissionAction | string | null $permissionAction = null,
): Response {
if ($response = $this->denyUnlessPermitted($user, 'viewAny', $permissionAction)) {
return $response;
}
return Response::allow();
}
use CoringaWc\FilamentAcl\Enums\PermissionEntityType;
use CoringaWc\FilamentAcl\Facades\FilamentPermission;
FilamentPermission::resolvePermissionSubjectUsing(
function (
string $ownerClass,
PermissionEntityType $ownerType,
?string $panelId,
?string $registrationKey,
array $meta,
): ?string {
return null;
},
);
FilamentPermission::buildPermissionKeyUsing(
function (string $ability, string|\CoringaWc\FilamentAcl\Support\PermissionAction $permissionAction): ?string {
return null;
},
);
use CoringaWc\FilamentAcl\Contracts\ResolvesPermissionSubject;
use CoringaWc\FilamentAcl\Contracts\BuildsPermissionKey;
use CoringaWc\FilamentAcl\Contracts\StoresPermissions;
// In AppServiceProvider::register()
$this->app->singleton(ResolvesPermissionSubject::class, MyCustomSubjectResolver::class);
$this->app->singleton(BuildsPermissionKey::class, MyCustomKeyBuilder::class);
$this->app->singleton(StoresPermissions::class, MyCustomStore::class);
use CoringaWc\FilamentAcl\Attributes\CustomPermissionActions;
use CoringaWc\FilamentAcl\Attributes\PermissionActions;
use CoringaWc\FilamentAcl\Attributes\PermissionPanel;
use CoringaWc\FilamentAcl\Attributes\PermissionSubject;
use CoringaWc\FilamentAcl\Attributes\RegisterPermissions;
use CoringaWc\FilamentAcl\Attributes\SharedPermissionOwner;
use CoringaWc\FilamentAcl\Resources\Concerns\HasResourcePermissions;
use Filament\Resources\Resource;
#[PermissionSubject('custom-subject')]
#[SharedPermissionOwner(CategoryResource::class)]
#[PermissionActions(['view'])]
#[CustomPermissionActions(['archive', 'export'])]
#[RegisterPermissions(false)]
#[PermissionPanel('admin')]
class PostResource extends Resource
{
use HasResourcePermissions;
}