Skip to content

tomatophp/filament-accounts

Repository files navigation

Screenshot

Filament Accounts Builder

Dependabot Updates PHP Code Styling Tests Latest Stable Version License Downloads

Manage your multi accounts inside your app using 1 table with multi auth and a lot of integrations

Caution

Don't update to v2.3 if you are using v2.2 or less because you will lose some features but you can update and use this features from integrated packages.

Screenshots

Accounts List Change Password Send Notifications Edit Account

Features

  • Accounts Manager
  • Account Types not tested
  • Account Login By not tested
  • Account Active/Block not tested
  • Account Avatar not tested
  • Account Impersonate Integration not tested
  • Account Table Column not tested
  • Export not tested
  • Import not tested
  • Account Filament Alerts Integration
  • Account Teams
  • Google Contacts Integrations

Use Case

you can use this package if you like to build a CRM or a multi-accounts app

Installation

composer require tomatophp/filament-accounts

after install your package please run this command

php artisan filament-accounts:install

if you are not using this package as a plugin please register the plugin on /app/Providers/Filament/AdminPanelProvider.php

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make())

Publish Account Model

you can publish your account model to add other relations or implement some interfaces by using this command

php artisan vendor:publish --tag="filament-accounts-model"

now go to your filament-accounts.php config file and change the model value to the new one.

if you don't find it you can publish it

php artisan vendor:publish --tag="filament-accounts-config"

Add Accounts Guard

now you need to add a new guard to your auth.php config like this

<?php

return [
 /*
    * Features of Tomato CRM
    *
    * accounts: Enable/Disable Accounts Feature
    */
    "features" => [
        "notifications" => false,
        "loginBy" => false,
        "avatar" => false,
        "types" => false,
        "teams" => false,
        "impersonate" => [
            'active'=> false,
            'redirect' => '/app',
        ],
    ],

    /*
     * Accounts Configurations
     *
     * login_by: Login By Phone or Email
     */
    "login_by" => "email",

    /*
     * Accounts Configurations
     *
     * model: User Model Class
     */
    "model" => \TomatoPHP\FilamentAccounts\Models\Account::class,
    
    
    
];

Usage

this plugin makes it easy to make a starting point for your app if this app has customers to manage

but here is the problem, every app has a different way of managing customers, so we built a Facade service to control the way you want to manage your customers

Use Avatar

add this method to your plugin in AdminPanelProvider.php

->plugin(
    \TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
        ->useAvatar()
)

Use Filament Types

just allow ->useTypes() on the plugin

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
    ->useTypes()
)

Show Address Field

you can show or hide address field on the create or edit form by using this code

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
    ->showAddressField()
)

Show Type Field

you can show or hide type field on the create or edit form by using this code

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
    ->showTypeField()
)

Attach Relation To Accounts

you can attach a new relation to the accounts relations manager by just passing the relation class to the facade service method

use TomatoPHP\FilamentAccounts\Facades\FilamentAccounts;

public function boot()
{
    FilamentAccounts::register([
        AccountOrdersRelationManager::make()
    ]);
}

Use Export & Import Actions

now on your main panel provider add ->useExport() , ->useImport() to the plugin

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
    ...
    ->useExport()
    ->useImport()
)

Use Account Column

Account Column

you can use the account column in any table by using this code

public static function table(Table $table): Table
{
    return $table
        ->columns([
            AccountColumn::make('account.id'),
        ]);
}

just pass the account id to the column

Use Filament Impersonate

you can use the impersonate to impersonate the user by install it first

composer require stechstudio/filament-impersonate

now on your main panel provider add ->useImpersonate() , ->impersonateRedirect('/app') to the plugin

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
    ...
    ->useImpersonate()
    ->impersonateRedirect('/app')
)

now clear your config

php artisan config:cache

for more information check the Filament Impersonate

Testing

if you like to run PEST testing just use this command

composer test

Code Style

if you like to fix the code style just use this command

composer format

PHPStan

if you like to check the code by PHPStan just use this command

composer analyse

Other Filament Packages

Checkout our Awesome TomatoPHP