Filament Role & Permission Effortless
Filament Hexa is a effortless role and permission management plugin for Filament
Installing Via Composer
Following CLI command to add the Composer repository to your composer.json
file.
composer config repositories.filamenthexa.ppmarket.org \
'{"type": "composer", "url": "https://filamenthexa.ppmarket.org"}' \
--file composer.json
To avoid manually typing these credentials, you may create a Composer auth.json file while using your license key in place of your password:
composer config http-basic.filamenthexa.ppmarket.org [email protected] your-license-key
After your composer.json
file has been updated, run the command below to start install this
package:
composer require hexters/hexa
Filament Hexa
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.
About Filament
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.
Demo
If you want to try it, you can install the lite version available at Filament Hexa Lite.
Installation
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
Plugin Setup
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(),
]);
}
Declaring Access Permissions
Resource, Page, & Cluster
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);
}
. . .
Widget
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.
Additional Access
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.'),
];
Actions, etc.
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');
}
Checking Access Permissions
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>
Options Setting
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
License
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.
Issue
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 🧑💻 🧑💻 🧑💻
Keywords
Hexa plugin
role and permission Filament
role management Filament
access permissions Filament
Hexa Filament
Hexa plugin
hexters ladmin
Hexa installation
Filament integration
Filament permission setup
Filament access control
role management PHP
Filament panel
Filament resource access
Filament widget permissions
0
base on 0 ratings