tomatophp / filament-accounts
全功能账户管理器,带有API/通知/联系人,用于管理您的联系人和账户
Requires
- php: ^8.1|^8.2
- filament/filament: ^3.0.0
- filament/notifications: ^3.0.0
- filament/spatie-laravel-media-library-plugin: ^3.2
- genealabs/laravel-model-caching: ^11.0
- laravel/sanctum: ^4.0
- tomatophp/console-helpers: ^1.1
- tomatophp/filament-helpers: ^1.0
README
账户管理器构建器
全功能账户管理器,带有API/通知/联系人,用于管理您的联系人和账户
截图
功能
- 账户管理器
- 缓存元数据
- 账户位置
- 账户团队
- 账户类型
- 账户请求
- 账户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() )
使用账户列
您可以通过使用此代码在任何表中使用账户列
public static function table(Table $table): Table { return $table ->columns([ AccountColumn::make('account.id'), ]); }
只需将账户 ID 传递给列即可
如何使用构建器
只需安装包,您将获得所有功能,它支持一些可直接使用的功能
- 账户
- 位置
- 联系我们
- 发送通知
- 认证 API
- 发送 OTP 事件
您可以从包的配置文件中激活或停用任何功能。
将账户用作 SaaS 面板
不安装 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 个控制器 AuthController
,ProfileController
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