Filament Hexa is an effortless role & permission plugin created for Filament, inspired by the concept of hexters/ladmin. This concept provides ease in managing each role and permission inline with code and offers an easy-to-understand interface.
This plugin is intended only for Administrators, as it has a separate admin table from the user table provided by Laravel. Additionally, this plugin will replace the auth.php
configuration file.
FilamentPHP is a lightweight and flexible PHP framework designed for building web applications. It aims to simplify application development by providing a clear structure and high modularity. The framework emphasizes speed, efficiency, and comes with many built-in features that facilitate effective web application development.
If you want to try it, you can install the lite version available at Filament Hexa Lite.
Note
You need to install the filament package first. You can refer to the official site at FilamentPHP.
To install Filament Hexa, you must add the repository package to the composer.json
file in the root of your project. Copy the command below and run it:
composer config repositories.filamenthexa.ppmarket.org \
'{"type": "composer", "url": "https://filamenthexa.ppmarket.org"}' \
--file composer.json
Once the repository is added to your composer.json file, you can install Filament Hexa like any other composer package by using the composer require command:
composer require hexters/hexa
Then, proceed with the installation of the hexa plugin:
php artisan hexa:install
Install database migrations:
php artisan migrate
Create a superadmin account for admin login:
php artisan hexa:account --create
Add the Filament Hexa
plugin to the created panel. If you haven't created one yet, see how to do it here Creating a new panel.
use Filament\Panel;
use Hexters\Hexa\Hexa;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
Hexa::make(),
]);
}
To declare access permissions for Resources, Pages, and Clusters, see the example below:
use Filament\Resources\Resource;
use Hexters\Hexa\Traits\HexAccess;
. . .
use HexAccess;
protected static ?string $permissionId = 'access.user';
protected static ?string $descriptionPermission = 'Admin can manage User accounts';
/**
* Additional permission (optional)
* You can add it or not depending on the needs of your application.
*/
protected static ?array $subPermissions = [
'access.user.create' => 'Can Create',
'access.user.edit' => 'Can Edit',
'access.user.delete' => 'Can Delete',
];
public static function canAccess(): bool
{
return hexa()->can(static::$permissionId);
}
. . .
To declare access permissions for Widgets, there is a difference in the access method as it uses the canView()
method.
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Hexters\Hexa\Traits\HexAccess;
class StatsOverview extends BaseWidget
{
use HexAccess;
protected static ?string $permissionId = 'widget.overview';
protected static ?string $descriptionPermission = 'Admin can view report overview';
public static function canView(): bool
{
return hexa()->can(static::$permissionId);
}
. . .
}
This way, the sidebar menu for resources and pages will appear for roles that have access to them.
Apart from the methods above, you can add additional permissions for other needs outside of Page, Resource, Widget, and Cluster. You can add them in the file /config/other-permissions.php
:
use Hexters\Hexa\Helpers\Can;
return [
Can::make(id: 'receive.email.order')
->name(name: 'Allow receiving email orders')
->description(description: 'Admins with this role will receive emails from incoming customer orders.'),
];
You can use the visible()
method on several Class Components
. For example, let's try it on a button.
Tables\Actions\EditAction::make()
->visible(hexa()->can('access.user.edit')),
For giving access to classes extended to Filament\Resources\Pages\EditRecord
, Filament\Resources\Pages\CreateRecord
, Filament\Resources\Pages\ListRecords
, you can use:
/**
* @param array<string, mixed> $parameters
*/
public static function canAccess(array $parameters = []): bool
{
return hexa()->can('access.user.edit');
}
Access can be granted to Resources, Pages, Widgets, Button Actions, etc. The access can be given as shown below.
Using the hexa utility function:
hexa()->can('hexa.admin')
Using Laravel's auth can function:
auth()->user()?->can('hexa.admin')
Using Laravel's Gate class:
use Illuminate\Support\Facades\Gate;
. . .
Gate::allows('hexa.admin')
In a blade template, you can use it as shown below.
<div>
@can('hexa.admin')
// Content here ...
@endcan
</div>
This plugin comes with an easy-to-use cache system that stores various settings required by the application. Check the file app/Filament/Pages/Option.php
. You can use the Form component to create various types of form inputs.
use Filament\Forms\Components\TextInput;
public function formOptions(Form $form): Form
{
return $form
->schema([
TextInput::make('referral-commision')
->default(hexa()->getOption('referral-commision', 10)) #<-- required to set the value
->required()
->suffix('%')
->numeric(),
]);
}
To call it, you can use the utility function provided by Hexa:
hexa()->getOption('referral-commision', 10)
If you want to save it manually, you can use the utility function below:
hexa()->setOption('key-option', 'The option value can be a string, array, number, etc.')
You can also retrieve the update date from this option by
hexa()->getOptionDate('key-option') // output : 2030-04-12 10:10:10
This plugin is not open source. You need a license to use this plugin. You can purchase it at Filament Hexa License or request it from the owner of this plugin.
If you encounter any issues with this plugin, you can submit them to the repository: Filament Hexa Issue
Thank you for using this plugin. We hope it speeds up your process in creating powerful applications.
Happy Coding ๐งโ๐ป ๐งโ๐ป ๐งโ๐ป