Plugins
Invites
Invite Users with a table action or a header action.
Table Builder
Panel Builder
Dark theme support
Yes
Multi language support
No
Not compatible with the latest version
Supported versions: 3.x
Documentation

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Provides an action to invite users from Filament users resource.

#Version Compatibility

Filament Filament Invite
3.x 1.x
4.x 2.x

#Installation

You can install the package via Composer:

#For Filament 3

composer require tapp/filament-invite:"^1.0"

#For Filament 4

composer require tapp/filament-invite:"^2.0"

Please check the docs for Filament 4 here

You can publish the config using:

php artisan filament-invite:install

#Requirements

  • User model which implements password resets and email verification (Laravel defaults)

#Usage

Add invite action to a table

public static function table(Table $table): Table
{
return $table
->actions([
\Tapp\FilamentInvite\Tables\InviteAction::make(),
]);
}

Invite action outside of a table uses a different class

protected function getHeaderActions(): array
{
return [
\Tapp\FilamentInvite\Actions\InviteAction::make(),
];
}

#Notification Routing

The password reset URL can be customized or use the Filament's authentication system:

  • Default: Uses Filament's built-in routing (respects panel's passwordResetRouteSlug configuration)
  • Custom: Uses completely custom routes outside Filament's authentication system
// Get the appropriate panel
$panel = $this->filamentPanelId
? Filament::getPanel($this->filamentPanelId)
: Filament::getDefaultPanel();
 
if (empty(config('filament-invite.routes.reset'))) {
// Use Filament's built-in routing (respects panel's passwordResetRouteSlug configuration)
$url = $panel->getResetPasswordUrl($this->token, $notifiable, ['invite' => true]);
} else {
// Support both custom routes and full URLs for maximum flexibility
$customRoute = config('filament-invite.routes.reset');
 
// Check if it's a full URL (starts with http/https)
if (str_starts_with($customRoute, 'http')) {
// Use the full URL directly
$url = $customRoute . '?' . http_build_query([
'token' => $this->token,
'email' => $email,
'invite' => true,
]);
} else {
// Use as route name - determine base URL based on configuration
$routeUrl = route($customRoute, [
'token' => $this->token,
'email' => $email,
'invite' => true,
], false);
 
// Choose base URL: panel URL or app.url (for backward compatibility)
$usePanelUrl = config('filament-invite.use_panel_url', false);
$baseUrl = $usePanelUrl ? $panel->getUrl() : config('app.url');
 
$url = rtrim($baseUrl, '/') . '/' . ltrim($routeUrl, '/');
}
}

#Integration with Filament Panel Configuration

When using the default routing, the package automatically respects your panel's authentication configuration:

// In your panel configuration
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
return $panel
->passwordResetRouteSlug('custom-reset') // This will be used automatically
->passwordResetRequestRouteSlug('custom-request');
}

To use custom routing you have plenty of options:

#Option 1: Custom Route Name

'routes' => [
'reset' => 'your.custom.route.name',
],

#Option 2: Full URL (External System)

'routes' => [
'reset' => 'https://external-auth.example.com/reset-password',
],

#Option 3: Different Domain/Subdomain

'routes' => [
'reset' => 'https://auth.yourapp.com/password-reset',
],

The package automatically detects whether you're providing a route name or a full URL and handles the URL construction accordingly.

#URL Base Configuration

For custom routes, you can choose between using the panel's URL or the application's URL:

// config/filament-invite.php
return [
'routes' => [
'reset' => 'your.custom.route.name',
],
 
// URL Configuration
'use_panel_url' => false, // Default: false (uses app.url for backward compatibility)
];

Options:

  1. 'use_panel_url' => false (default): Uses config('app.url') - maintains backward compatibility
  2. 'use_panel_url' => true: Uses $panel->getUrl()

#Customization

#Reset URL

implement getResetPasswordUrl on the user model

public function getResetPasswordUrl(string $token, array $parameters = []): string
{
return URL::signedRoute(
'filament.admin.auth.password-reset.reset',
[
'email' => $this->email,
'token' => $token,
...$parameters,
],
);
}

#Notification

implement the sendPasswordSetNotification method on the user model

public function sendPasswordSetNotification($token)
{
Notification::send($this, new SetPassword($token));
}

#Testing

composer test

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

Tapp Network

Tapp Network is a digital transformation agency. We deliver performance-driven solutions for organizations of all sizes to rapidly plan, build and grow their market share, revenue, and impact.

11
Plugins
339
Stars
More from this author
Featured Plugins