如何在Laravel 5.2中使用HipsterJazzbo / Landlord包 - 单个数据库多租户?

时间:2016-08-24 17:26:15

标签: php mysql laravel laravel-5.2 laravel-5.1

我正在为Laravel 5.2+使用https://github.com/HipsterJazzbo/Landlord单一数据库多租户解决方案。我有一个公司表,所有其他表都有一个company_id列。

我不确定如何在全局中间件,auth系统或基本控制器的构造函数中实现调用 Landlord :: addTenant($ tenantColumn,$ tenantId)。我很困惑......

我该怎么做?

参数 $ tenantColumn 是否等同于每个表的company_id列?

参数 $ tenantId 是否是指group_id列中包含的每家公司的ID?

谢谢你!

1 个答案:

答案 0 :(得分:0)

全球中间件不是好地方,因为您无法访问经过身份验证的用户。解决方案是创建路由中间件,例如:

<?php

namespace App\Http\Middleware;

use Closure;
use HipsterJazzbo\Landlord\Facades\Landlord;
use Illuminate\Support\Facades\Auth;

class LimitToCurrentCompany
{
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            $tenant = Auth::user()->currentCompany;
            Landlord::addTenant($tenant);
        }

        return $next($request);
    }
}

将它添加到app / Http / Kernel.php中的$ routeMiddleware数组:

protected $routeMiddleware = [
    […]
    'limitToCurrentCompany' => \App\Http\Middleware\LimitToCurrentCompany::class,
];

然后在你的路线文件中:

Route::group(['middleware' => 'limitToCurrentCompany'], function () {
    // your routes
});

是的,就像评论中所说的那样,$ tenantColumn是company_id,$ tenantId是公司的id。