<
DAE7
a href="https://packagist.org/packages/hexters/hexa-lite" rel="nofollow">
Filament Hexa Lite is a free and developer-friendly role and permission management plugin for FilamentPHP.
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 2, Hexa Lite is more intuitive, customizable, and production-ready.
Version | Doc. |
---|---|
V1 | Read Doc. |
V2 | Read Doc. |
- Installation
- Adding Role Selection
- Multi Panel Support
- Defining Permissions
- Access Control
- Available Traits
- Features in Pro Version
- License
- Issues & Feedback
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 UserResource
form:
use Filament\Forms;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('email')
->unique(ignoreRecord: true)
->required(),
Forms\Components\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 v2 unlocks powerful features designed for serious projects:
- Role & permission descriptions
- Custom role sorting
- Gate grouping (with nested access)
- Multi-tenancy support
- Meta option storage
All of this — starting at just $1 per license.
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!