tomatophp/filament-accounts

全功能账户管理器,带有API/通知/联系人,用于管理您的联系人和账户

v2.1.4 2024-09-17 16:32 UTC

README

Screenshot

账户管理器构建器

Latest Stable Version License Downloads

全功能账户管理器,带有API/通知/联系人,用于管理您的联系人和账户

截图

Accounts List Change Password Send Notifications Edit Account Accounts Locations Accounts Requests Edit Request Contacts

功能

  • 账户管理器
  • 缓存元数据
  • 账户位置
  • 账户团队
  • 账户类型
  • 账户请求
  • 账户SaaS面板(包含编辑个人资料[Jetstream])
  • 账户登录方式
  • 账户激活/阻止
  • 账户头像
  • 账户OTP激活
  • 账户Filament警报集成
  • 账户模拟集成
  • 账户API
  • 认证构建器服务
  • 支持多租户
  • 账户表列
  • 账户面板事件
  • 将新字段附加到账户
  • 导出
  • 导入
  • 谷歌联系人集成

安装

composer require tomatophp/filament-accounts

安装您的包后,请运行以下命令

php artisan filament-accounts:install

如果您不是将此包用作插件,请在 /app/Providers/Filament/AdminPanelProvider.php 上注册插件

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

发布账户模型

您可以使用此命令发布您的账户模型以添加其他关系或实现一些接口

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

现在转到您的 filament-accounts.php 配置文件,并将模型值更改为新的值。

如果您找不到它,您可以使用此命令发布它

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

添加账户守卫

现在您需要在您的 auth.php 配置中添加一个新的守卫,如下所示

<?php

return [
 /*
    * Features of Tomato CRM
    *
    * accounts: Enable/Disable Accounts Feature
    */
    "features" => [
        "accounts" => true,
        "meta" => true,
        "locations" => true,
        "contacts" => true,
        "requests" => true,
        "notifications" => true,
        "loginBy" => true,
        "avatar" => true,
        "types" => true,
        "teams" => true,
        "apis" => true,
        "send_otp" => true,
        "impersonate" => [
            'active'=> true,
            'redirect' => '/app',
        ],
    ],

    /*
     * Accounts Configurations
     *
     * resource: User Resource Class
     */
    "resource" => null,

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

    /*
     * Accounts Configurations
     *
     * required_otp: Enable/Disable OTP Verification
     */
    "required_otp" => true,

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

    /*
     * Accounts Configurations
     *
     * guard: Auth Guard
     */
    "guard" => "accounts",
];

使用方法

此插件使创建具有客户管理功能的应用程序的起点变得容易

但这里的问题是,每个应用程序管理客户的方式都不同,因此我们构建了一个外观服务来控制您希望如何管理客户

使用头像

您需要安装并迁移媒体库插件,可以使用此命令发布迁移

php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"

现在您需要迁移您的数据库

php artisan migrate

现在将此方法添加到您的插件中的 AdminPanelProvider.php

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

使用Filament类型

您可以使用类型通过安装 Filament Types 来管理您的账户类型

composer require tomatophp/filament-types

之后安装类型

php artisan filament-types:install

并在插件上允许 ->useTypes()

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

使用通知

您需要安装 Filament Alerts

composer require tomatophp/filament-alerts

之后安装警报

php artisan filament-alerts:install

并在插件上允许 ->useNotifications()

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

使用账户位置

您可以通过安装 Filament Locations 来使用账户位置

composer require tomatophp/filament-locations

之后安装位置

php artisan filament-locations:install

并在插件上允许 ->useLocations()

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

显示地址字段

您可以使用此代码在创建或编辑表单上显示或隐藏地址字段

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

显示类型字段

您可以使用此代码在创建或编辑表单上显示或隐藏类型字段

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

使用账户元关系管理器

您可以通过这种方式允许其他功能和页面

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

自动账户元数据缓存

在您的 .env 中添加以下内容

CACHE_STORE=array
MODEL_CACHE_STORE=array

支持的缓存存储包括

+ Redis
+ MemCached
+ APC
+ Array

使用账户请求资源

您可以通过此代码允许请求管理器

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

使用账户联系我们资源

您可以通过以下代码允许“联系我们”经理:

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

允许团队经理

不运行安装命令安装 jetstream。

composer require laravel/jetstream

然后发布迁移

php artisan vendor:publish --tag=filament-accounts-teams-migrations

现在您需要迁移您的数据库

php artisan migrate

现在发布您的 Accounts 模型

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

在已发布的模型中使用此实现

class Account extends Authenticatable implements HasMedia, FilamentUser, HasAvatar, HasTenants, HasDefaultTenant
{
    ...
    use InteractsWithTenant;
}

在您的主面板上必须使用团队

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

将新字段附加到账户

您可以通过只需向外观服务方法传递字段名和字段类型即可将新字段附加到 accounts 表

use TomatoPHP\FilamentAccounts\Facades\FilamentAccounts;

public function boot()
{
    FilamentAccounts::attach(
        key: 'birthday',
        label: __('Birthday'),
        type: 'date',
        show_on_create: false,
        show_on_edit: false
    );
}

附加到 Accounts 的关系

您可以通过只需向外观服务方法传递关系类即可将新关系附加到 accounts 关系管理器

use TomatoPHP\FilamentAccounts\Facades\FilamentAccounts;

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

附加表按钮

您可以通过只需向外观服务方法传递按钮类即可将新按钮附加到 accounts 表

use TomatoPHP\FilamentAccounts\Facades\FilamentAccounts;

public function boot()
{
    FilamentAccounts::registerAccountActions([
        \Filament\Tables\Actions\Action::make('orders')
    ]);
}

使用导出和导入操作

在使用导出和导入操作之前,您需要安装 laravel excel 包

composer require maatwebsite/excel

现在在您的主面板提供者中向插件添加 ->useExport()->useImport()

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

使用账户列

Account Column

您可以通过使用此代码在任何表中使用账户列

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

只需将账户 ID 传递给列即可

如何使用构建器

只需安装包,您将获得所有功能,它支持一些可直接使用的功能

  • 账户
  • 位置
  • 联系我们
  • 发送通知
  • 认证 API
  • 发送 OTP 事件

您可以从包的配置文件中激活或停用任何功能。

将账户用作 SaaS 面板

Register OTP Panel Home Panel Menu Edit Profile Manage Sessions Team Settings Invite Team API Tokens

不安装 jetstream 即可安装它。

composer require laravel/jetstream

然后发布迁移

php artisan vendor:publish --tag=filament-accounts-teams-migrations

现在您需要迁移您的数据库

php artisan migrate

现在发布您的 Accounts 模型

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

在已发布的模型中使用此实现

class Account extends Authenticatable implements HasMedia, FilamentUser, HasAvatar, HasTenants, HasDefaultTenant
{
    ...
    use InteractsWithTenant;
}

在您的主面板上必须使用团队

->plugin(\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
        ...
        ->canLogin()
        ->canBlocked()
        ->useTeams()
)

现在在您的新面板上只需使用此插件

->plugin(
    FilamentAccountsSaaSPlugin::make()
        ->databaseNotifications()
        ->checkAccountStatusInLogin()
        ->APITokenManager()
        ->editTeam()
        ->deleteTeam()
        ->teamInvitation()
        ->showTeamMembers()
        ->editProfile()
        ->editPassword()
        ->browserSesstionManager()
        ->deleteAccount()
        ->editProfileMenu()
        ->registration()
        ->useOTPActivation(),
)

您可以通过仅从插件中删除方法来更改设置。

注意要使用 ->useOTPActivation(),您需要首先从下一步开始安装 Filament Alets,要使用 ->databaseNotifications(),您需要首先发布通知数据库表

在 SaaS 面板上使用账户位置

您可以通过使用此代码来使账户管理位置

->plugin(
    FilamentAccountsSaaSPlugin::make()
        ->canManageAddress()
)

它将在租户菜单中添加“编辑位置”菜单,并且账户可以管理其位置

在 SaaS 面板上使用账户请求

您可以通过使用此代码来管理账户请求

use TomatoPHP\FilamentAccounts\Services\Contracts\AccountRequestForm;

->plugin(
    FilamentAccountsSaaSPlugin::make()
        ->canManageRequests(form: [
            AccountRequestForm::make('account_approve')
                ->schema([
                    TextInput::make('name')
                        ->label('Name')
                        ->required(),
                ]),
            AccountRequestForm::make('account_verify')
                ->schema([
                    TextInput::make('id')
                        ->label('ID')
                        ->numeric()
                        ->minLength(14)
                        ->maxLength(14)
                        ->required(),
                ])
        ])
        ->useTypes()
)

如您所见,您可以从每种请求类型中选择一个

在 SaaS 面板上使用账户联系我们

您可以通过使用此代码来管理账户联系我们

->plugin(
    FilamentAccountsSaaSPlugin::make()
        ->showContactUsButton()
)

或者您可以通过使用 livewire 组件在您的应用程序的任何地方使用它

@livewire('tomato-contact-us-form')

使用 Filament Impersonate 与 SaaS 面板

您可以通过首先安装它来使用 impersonate 来模拟用户

composer require stechstudio/filament-impersonate

现在在您的主面板提供者中向插件添加 ->useImpersonate()->impersonateRedirect('/app')

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

现在清除您的配置

php artisan config:cache

有关更多信息,请参阅 Filament Impersonate

认证事件

我们向包中添加了大量的事件,因此您可以监听它们并执行您想要的操作。

OTP 事件

use TomatoPHP\FilamentAccounts\Events\SendOTP;
use TomatoPHP\FilamentAlerts\Services\SendNotification;

public function register()
{
    Event::listen([
        SendOTP::class
    ], function ($data) {
        $user = $data->model::find($data->modelId);

        SendNotification::make(['email'])
            ->title('OTP')
            ->message('Your OTP is ' . $user->otp_code)
            ->type('info')
            ->database(false)
            ->model(Account::class)
            ->id($user->id)
            ->privacy('private')
            ->icon('bx bx-user')
            ->url(url('/'))
            ->fire();
    });
}

账户成功登录事件

当用户成功登录时,我们触发此事件。

use TomatoPHP\FilamentAccounts\Events\AccountLogged;

public function register()
{
    Event::listen([
        AccountLogged::class
    ], function ($data) {
        $user = $data->model::find($data->modelId);
        if($user->meta('is_admin_approve') !== 'yes'){
            return response()->json([
                "status" => false,
                "message" => __('your Account is activated. but you cannot login till admin approve.'),
            ], 400)->send();
        }
    });
}

账户注册事件

当用户成功注册时,我们触发此事件。

use TomatoPHP\FilamentAccounts\Events\AccountLogged;

public function register()
{
    Event::listen([
        AccountRegistered::class
    ], function ($data) {
        $user = $data->model::find($data->modelId);
        $user->last_login = Carbon::now();
        $user->save();
    });
}

使用认证构建器

您可以通过使用相同的 accounts 表以非常简单的方式构建多认证,因此我们创建了一个外观类来帮助您完成此操作。

如何使用

您只需创建 2 个控制器 AuthControllerProfileController

use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Login;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Register;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Otp;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\ResetPassword;

class AuthController extends Controller
{
    use Login;
    use Register;
    use Otp;
    use ResetPassword;
    
    public string $guard = 'web';
    public bool $otp = true;
    public string $model = Account::class;
    public string $loginBy = 'email';
    public string $loginType = 'email';
    public ?string $resource = null;

    public function __construct()
    {
        $this->guard = config('filament-accounts.guard');
        $this->otp = config('filament-accounts.required_otp');
        $this->model = config('filament-accounts.model');
        $this->loginBy = config('filament-accounts.login_by');
        $this->loginType = config('filament-accounts.login_by');
        $this->resource = config('filament-accounts.resource', null);
    }

并在您的 profile 控制器中,您只需使用 Profile 特性

use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Profile\User;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Profile\Update;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Profile\Delete;
use TomatoPHP\FilamentAccounts\Services\Traits\Auth\Profile\Logout;

class ProfileController extends Controller
{
    use User;
    use Update;
    use Delete;
    use Logout;

    public string $guard = 'web';
    public bool $otp = true;
    public string $model = Account::class;
    public string $loginBy = 'email';
    public string $loginType = 'email';
    public ?string $resource = null;

    public function __construct()
    {
        $this->guard = config('filament-accounts.guard');
        $this->otp = config('filament-accounts.required_otp');
        $this->model = config('filament-accounts.model');
        $this->loginBy = config('filament-accounts.login_by');
        $this->loginType = config('filament-accounts.login_by');
        $this->resource = config('filament-accounts.resource', null);
    }
}

API

我们在包中添加了大量的 API,因此您可以使用它们来管理您的账户。请参阅此文件 API Collection

自定义创建/编辑验证

您只需将所需的规则传递给外观服务方法,就可以自定义创建/编辑账户的验证规则。

use TomatoPHP\FilamentAccounts\Facades\FilamentAccounts;

public function boot()
{
    FilamentAccounts::validation(
        create: [
            'email' => 'unique:accounts,email',
            'type_id' => 'required|integer|exists:types,id',
        ],
        edit: [
            'email' => 'sometimes|unique:accounts,email',
            'type_id' => 'sometimes|integer|exists:types,id',
        ],
        api_create: [
            'email' => 'unique:accounts,email',
            'type_id' => 'required|integer|exists:types,id',
        ],
        api_edit: [
            'email' => 'sometimes|unique:accounts,email',
            'type_id' => 'sometimes|integer|exists:types,id',
        ]
    );

}

通过使用此方法,您可以自定义在Web和API上创建/编辑账户的验证规则。

其他Filament包

请查看我们的神奇的TomatoPHP