dutchcodingcompany/filament-developer-logins

Add buttons to the login page of Filament to login as a specific user.

1.5.0 2024-11-19 13:01 UTC

This package is auto-updated.

Last update: 2024-11-21 16:27:12 UTC


README

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

This plugin allows you to enable one-click logins for your local Filament panels, which is useful when developing a Filament project with multiple users and various roles.

example-screenshot.png

Installation

You can install the package via composer.

composer require dutchcodingcompany/filament-developer-logins

Usage

Register the plugin in the Filament panel provider (the default file is app/Providers/Filament/AdminPanelProvider.php).

In the users method you can define the users (note: the users must exist), the key is used as a label on the login button and the value is used to search the user in the database.

// ...
->plugins([
    FilamentDeveloperLoginsPlugin::make()
        ->enabled()
        ->users([
            'Admin' => 'admin@example.com',
            'User' => 'user@example.com',
        ])
]);

The users() method can also be passed a closure to compute the users list at render time, for example from the database.

// ...
FilamentDeveloperLoginsPlugin::make()
    ->users(fn () => User::pluck('email', 'name')->toArray())
]);

Customization

enabled()

By default, the plugin is disabled. You can enable it by calling the enabled() method. I strongly suggest enabling this plugin only in the local environment. You can achieve this by using the app()->environment() method. Additionally, the enabled() method also accepts a closure if you wish to enable the plugin based on a custom condition.

Example:

// ...
FilamentDeveloperLoginsPlugin::make()
    ->enabled(app()->environment('local'))

columns()

To customize the grid layout, you can use the columns() method. This method allows you to configure the grid layout based on your needs.

By default, the columns() method sets the grid to 2 columns. You can adjust the default column count or specify different column counts for different screen sizes by passing an array.

Example:

// ...
FilamentDeveloperLoginsPlugin::make()
    ->columns() // default 2

or you can use an array like this

// ...
FilamentDeveloperLoginsPlugin::make()
        ->columns([
        'sm' => 3,
        'xl' => 6,
        '2xl' => 8,
    ])

switchable()

By default, a "Switch to" button is shown in the top right corner of the screen, so you can easily switch between the provided users. If you want to disable this feature, you can use the switchable() method.

// ...
FilamentDeveloperLoginsPlugin::make()
    ->switchable(false) // This also accepts a closure.

switchable-screenshot.png

column()

By default, the user column is set to email. If you want to use a different column, you can use the column() method.

Example:

FilamentDeveloperLoginsPlugin::make()
    ->column('name')

modelClass()

By default, the model class is set to App\Models\User. If you want to use a different model, you can use the modelClass() method.

Example:

FilamentDeveloperLoginsPlugin::make()
    ->modelClass(Admin::class)

redirectTo()

By default, the user will be redirected using the Filament::getUrl() method, which directs them to the dashboard. In the case of multi-tenancy, the user will also be redirected to the correct tenant. If you prefer to use a different url, you can utilize the redirectTo() method.

FilamentDeveloperLoginsPlugin::make()
    ->redirectTo('/custom-url')

Since the routes are not yet registered when the plugin is created, you need to use a closure to redirect to a named route.

FilamentDeveloperLoginsPlugin::make()
    ->redirectTo(fn () => route('custom.route'))

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.