多租户库 tenancy/multi-tenant 教程
1. 项目介绍
tenancy/multi-tenant 是一个为 Laravel 框架设计的多租户解决方案。该项目旨在帮助开发者轻松地在单一应用程序中管理多个独立的客户(或租户)数据。它提供了数据隔离、租户配置以及在不同租户之间切换的功能,使你能够构建高效且安全的多租户 Web 应用。
核心特性包括:
- 数据库层面的租户隔离
- 支持多种存储驱动器(如文件系统、数据库等)
- 中心化的租户管理和切换
- 轻松集成到现有的 Laravel 项目中
2. 项目快速启动
安装依赖
在你的 Laravel 项目根目录下,通过 Composer 安装此包:
composer require tenancy/multi-tenant
配置
发布配置文件并进行必要的修改:
php artisan vendor:publish --provider="TenancyServiceProvider"
在 .env 文件中配置默认的租户数据库连接名称:
TENANCY_DATABASE_CONNECTION=default
启动中间件
在 app/Http/Kernel.php 的 $routeMiddleware 数组中添加并注册 tenancy 中间件:
'web' => \App\Http\Middleware\EncryptCookies::class,
'tenancy' => \Tenancy\Middleware\InitializeTenancyByDomain::class,
// ...
在路由文件中使用中间件:
Route::middleware(['tenancy'])->group(function () {
// 你的租户专属路由...
});
创建模型和迁移
创建一个继承自 \Tenancy\Models\Tenant 的模型,例如 App\Models\Tenant,然后创建对应的迁移文件来定义租户的数据表结构。
php artisan make:model Tenant -m
在迁移文件中,确保设置正确的键:
public function up()
{
Schema::create('tenants', function (Blueprint $table) {
$table->id();
// 其他字段...
$table->string('name')->unique(); // 租户名,用于识别
$table->primary('id');
});
}
运行迁移以创建数据表:
php artisan migrate
初始化租户
在合适的地方(如用户登录时)初始化租户:
use App\Models\User;
use Tenancy\AffectsITHERuntime\ManagesTenantRuntime;
class AuthController extends Controller
{
use ManagesTenantRuntime;
public function login(Request $request)
{
// 登录逻辑...
// 假设我们从请求中获取到了租户 ID
$tenantId = ...;
// 初始化租户
$this->initiate($tenantId);
return redirect()->intended('/dashboard');
}
}
3. 应用案例和最佳实践
- 用户管理:为每个租户维护单独的用户列表。
- 权限控制:实施基于角色的访问控制(RBAC),根据租户分配不同的权限。
- 租户间隔离:确保租户只能访问自己的资源,避免数据泄露。
- 扩展性:根据租户需求定制特定功能,而不会影响其他租户。
最佳实践:
- 使用命令行工具创建和管理租户,保持一致性。
- 管理租户数据备份和恢复策略,确保灾难恢复能力。
- 监控租户活动以识别性能瓶颈和异常行为。
4. 典型生态项目
以下是一些与 tenancy/multi-tenant 集成的生态系统组件:
- Database:
\Tenancy\Database\Drivers\Laravel\DatabaseServiceProvider用于处理数据库连接的切换。 - Filesystem:
\Tenancy\Storage\Filesystems\Provider提供了文件系统的租户隔离支持。 - Cache:
\Tenancy\Cache\Manager实现了租户级别的缓存。
你也可以查看 GitHub 上的项目仓库,了解更多的第三方扩展和示例:https://github.com/tenancy/multi-tenant
完成上述步骤后,你应该已经准备好使用 tenancy/multi-tenant 开始构建你的多租户 Laravel 应用了。记得查阅项目文档以获取更详细的配置和使用指南。祝你好运!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



