henryavila / laravel-nova-multitenancy
在 Laravel Nova 中集成多租户单数据库。
Requires
- php: ^8.2
- illuminate/contracts: ^9.0|^10.0|^11.0
- spatie/laravel-multitenancy: ^3.0.2
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-11 19:10:02 UTC
README
在 Laravel Nova 中集成多租户单数据库。
此包基于 https://spatie.be/docs/laravel-multitenancy。因此,spatie/laravel-multitenancy 的逻辑和配置仍然适用
安装
您可以通过 composer 安装此包
composer require henryavila/laravel-nova-multitenancy
您可以使用以下命令发布配置、视图、迁移和翻译
php artisan vendor:publish --provider="HenryAvila\LaravelNovaMultitenancy\LaravelNovaMultitenancyServiceProvider"
视图文件将被发布,您可以按需自定义它。别忘了运行 npm run build
您可以使用以下命令运行迁移(创建租户表)
php artisan migrate
编辑文件 app\Http\Kernel.php
,在 web 组中添加条目并创建租户组
protected $middlewareGroups = [ // ... 'web' => [ // ... \HenryAvila\LaravelNovaMultitenancy\Http\Middleware\SetTenantMiddleware::class, ], // ... 'tenant' => [ \HenryAvila\LaravelNovaMultitenancy\Http\Middleware\NeedsTenant::class, \HenryAvila\LaravelNovaMultitenancy\Http\Middleware\EnsureValidTenantSession::class, ] ];
如果您在 Laravel Nova 中激活了(用户模拟)[https://nova.laravel.net.cn/docs/4.0/customization/impersonation.html],您必须设置此事件监听器。
编辑文件 App\Providers\EventServiceProvider
并添加
protected $listen = [ \Laravel\Nova\Events\StartedImpersonating::class => [ \HenryAvila\LaravelNovaMultitenancy\Listeners\ClearTenantSessionListener::class, ], \Laravel\Nova\Events\StoppedImpersonating::class => [ \HenryAvila\LaravelNovaMultitenancy\Listeners\ClearTenantSessionListener::class, ], ];
让您的 User
模型继承 \HenryAvila\LaravelNovaMultitenancy\Models\User
如果您想自定义租户模型,在配置文件中更改它
将 traits \HenryAvila\LaravelNovaMultitenancy\Traits\ModelWithTenant
添加到所有具有租户感知能力的模型
在您的 database
文件中添加一个 tenant_connection
条目,与租户数据库连接。见
return [ // database.php 'tenant_connection' => env('DB_TENANT_CONNECTION', 'tenant'),
这是连接和数据库之间的关系
PS.: 不要忘记在 database.connections
配置文件中创建这些连接。
用法
要保护特定的路由,只需将 'tenant' 中间件添加到路由即可
// in a routes file Route::middleware('tenant')->group(function() { // routes });
如果您收到错误:Route [login] not defined.
。请记住,在您的 App\Http\Middleware\Authenticate
文件中将路由从 login
更改为 nova.login
protected function redirectTo($request) { return $request->expectsJson() ? null : route('nova.login'); }
另一种不将租户定义为路由的方法是在路由声明中设置以下 default
数据
Route::get('/', [Controller::class, 'index']) ->defaults(\HenryAvila\LaravelNovaMultitenancy\LaravelNovaMultitenancy::SKIP_ROUTE, true);
如果 Tenant
有 domains
关系,允许根据当前域名定义当前租户。该 domains
关系模型必须包含一个 fqdn
属性,其中包含 fqdn 域名
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅我们的安全策略 我们的安全策略
鸣谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件