我正在为Laravel 5.2+使用https://github.com/HipsterJazzbo/Landlord单数据库多租户解决方案。我有一个company表,所有其他表都有一个company_id列。
我不确定如何在全局中间件,身份验证系统或基本控制器的构造函数中实现调用Landlord :: addTenant($ tenantColumn,$ tenantId)的方法...我很困惑...
我怎么做?
参数$ tenantColumn是否等于每个表的company_id列?
参数$ tenantId是否引用company_id列中包含的每个公司的ID?
谢谢!
最佳答案
全局中间件不是一个好地方,因为您无权访问经过身份验证的用户。一种解决方案是创建路由中间件,例如:
<?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。