Filament Hexa Lite is a free and developer-friendly role and permission management plugin for FilamentPHP V4.
It helps you manage user roles and access permissions across Resources, Pages, and Widgets — with support for multi-panel apps via custom guards.
Currently in version 3, Hexa Lite is more intuitive, customizable, and production-ready.
Version | Filament | Doc. |
---|---|---|
V1 | V3 | Read Doc. |
V2 | V3 | Read Doc. |
V3 | V4 | Read Doc. |
Install the package via Composer:
composer require hexters/hexa-lite
Run the database migration:
php artisan migrate
Register the plugin in your Filament panel:
use Filament\Panel;use Hexters\HexaLite\HexaLite;Â public function panel(Panel $panel): Panel{ return $panel ->plugins([ HexaLite::make(), ]);}
Apply the trait to your User
model:
use Hexters\HexaLite\HexaLiteRolePermission;Â class User extends Authenticatable{ use HasFactory, Notifiable; use HexaLiteRolePermission;}
To allow role assignment via the admin panel, add a select input to your UserForm
class:
use Filament\Forms\Components\Select;use Filament\Forms\Components\TextInput; public static function form(Form $form): Form{ return $form ->schema([ TextInput::make('email') ->unique(ignoreRecord: true) ->required(), Select::make('roles') ->label(__('Role Name')) ->relationship('roles', 'name') ->placeholder(__('Superuser')), ]);}
Hexa Lite supports multiple panels, each with its own auth guard
.
public function panel(Panel $panel): Panel{ return $panel->authGuard('reseller');}
public function panel(Panel $panel): Panel{ return $panel->authGuard('customer');}
Configure guards in config/auth.php
.
Define permissions using the defineGates()
method on Resources, Pages, or Widgets:
use Hexters\HexaLite\HasHexaLite;Â class UserResource extends Resource{ use HasHexaLite;Â public function defineGates(): array { return [ 'user.index' => __('Allows viewing the user list'), 'user.create' => __('Allows creating a new user'), 'user.update' => __('Allows updating users'), 'user.delete' => __('Allows deleting users'), ]; }}
Users with no assigned role are treated as Superusers and have full access by default.
To restrict access to a resource:
public static function canAccess(): bool{ return hexa()->can('user.index');}
Useful in queued jobs, commands, or background services:
return hexa()->user(User::first())->can('user.index');
Use visible()
to conditionally display UI elements:
Actions\CreateAction::make('create') ->visible(fn() => hexa()->can(['user.index', 'user.create']));
You can still use Laravel’s native authorization:
Auth::user()->can('user.create');Â Gate::allows('user.create');Â Gate::forUser(User::first())->allows('user.create');Â @can('user.create') // Blade directive@endcan
Trait | Description |
---|---|
HexaLiteRolePermission |
Apply to your Authenticatable user model |
HasHexaLite |
Use in Resources, Pages, Widgets, or Clusters |
UuidGenerator |
Use on models with uuid fields |
UlidGenerator |
Use on models with ulid fields |
Need more flexibility and control?
Filament Hexa Pro v3 unlocks powerful features designed for serious projects:
A small investment for a much more capable permission system.
Learn more in the official documentation:
👉 Hexa Pro Documentation
This project is open-source and licensed under the MIT License. You are free to use, modify, and distribute it with attribution.
Found a bug or want to contribute?
Open an issue at: https://github.com/hexters/hexa-lite/issues
Thank you for using Filament Hexa Lite!