ringierimu / multi-tenancy

此包已被弃用且不再维护。未建议替代包。

Laravel 多租户包

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

This package is not auto-updated.

Last update: 2024-02-17 09:25:42 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 表创建种子数据并运行种子数据
    例如。
<?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();
}

租户应用程序配置

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