ringierimu/multi-tenant

此包已被放弃,不再维护。未建议替代包。

Laravel 多租户包

dev-master 2019-05-03 14:22 UTC

This package is not auto-updated.

Last update: 2024-02-18 16:54:25 UTC


README

多租户 指的是一种软件架构,其中单个软件实例在服务器上运行并服务于多个租户。租户是一组共享特定访问权限的用户,对软件实例有特定的权限。在多租户架构中,软件应用程序被设计为为每个租户提供实例的专用份额,包括其数据、配置、用户管理、租户个别功能和非功能属性。

安装

$ composer require ringierimu/multi-tenant

运行迁移

$ php artisan migrate

配置

  1. 打开位于您的 Http 目录内的 kernel.php 文件,并将 Ringierimu\MultiTenant\Http\Middleware\TenantMiddleware\TenantMiddleware::class 添加到全局 http 中间件 $middleware
 /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        ...
        TenantMiddleware::class
    ];
  1. TenantDependableTrait 添加到您的模型类以支持工作流程
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Ringierimu\MultiTenant\Traits\TenantDependableTrait;

/**
 * Class Post
 * @package App
 */
class Post extends Model
{
    use TenantDependableTrait;
}
  1. domains 表创建填充数据的 Seeder 并运行 Seeder。
    例如。
<?php
use Illuminate\Support\Facades\DB;

DB::table('domains')->insert([
    'title' => 'Ringier',
    'host' => 'ringier.test',
    'alieses' => 'rg',
    'country_id' => 1
]);

功能

租户解析器

  • TenantMiddleware::class 通过 HTTP 请求解析租户。它使用请求域名查询 domains 表。
  • 要获取解析后的租户实例,您可以使用依赖注入注入 TenantManager 类或使用 Laravel 依赖注入容器返回 TenantManager 类的现有实例。
<?php

$tenantManager = app(Ringierimu\MultiTenant\TenantManager::class);
echo $tenantManager->getDomain();
<?php

use Ringierimu\MultiTenant\TenantManager;

public function login(TenantManager $tenantManager)
{
    echo $tenantManager->getDomain();
}

租户应用配置

  • 要为每个租户添加自定义配置,请在 Laravel 默认配置目录中添加 tenants 目录,以租户的 aliases 键作为子目录。例如,config/tenants/rg/app.php
    注意:aliases 键必须与 domains 表上设置的租户别名键相同。
  • 在租户目录中找到的任何配置键将覆盖 Laravel 默认配置中的任何现有键。