Laravel 多数据库租赁,使用主用户表登录

问题描述 投票:0回答:1

我想为 saas 类型的商店应用程序进行多数据库多租户,以便用户位于主数据库中,并且用户使用此表登录,并且所有商店都有不同的数据库,并且 users_table 有商店数据库 id,并且所有商店都认为模型使用租户连接。

我尝试使用 Stancl/Tenancy,但它都是关于域和子域的,我希望它使用单个域来完成,并使用 users_table 来存储tenant_id和tenant_db_name并从那里初始化租户。如果不使用租赁套餐也可以。 我是 Laravel 的新手,因此我们将不胜感激。

laravel multi-tenant laravel-10 multi-database multi-database-connections
1个回答
0
投票

这个答案有点晚了,但它会对像我这样的未来菜鸟有所帮助。

我正在使用 Laravel 构建 SAAS 应用程序,我的要求是为中央应用程序和租户应用程序使用单个域,并且每个租户应该拥有自己的数据库。我发现了 stancl/tenancy Laravel 包。问题是有些人,比如我,由于缺乏经验和语言而无法理解文档。所以在这里我会尝试使其成为一个简单的分步指南。

第 1 步:安装新的 Laravel

composer create-project laravel/laravel example-app

第2步:安装laravelfortenancy包

composer require stancl/tenancy

运行所需的必要命令

php artisan tenancy:install

然后将服务提供者添加到您的 config/app.php 文件中:

App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\TenancyServiceProvider::class, // <-- here

现在,由于我的要求是使用具有多数据库租赁的单个域。该包的默认行为是使用 web.php 文件作为中央路由,使用 tenant.php 作为租户路由。为此,我放弃了 tenant.php 文件,并将 web.php 用于租户和中央应用程序。

使用命令制作客户中间件

php artisan make:middleware VerifyTenant

在 verifyTenant 中,粘贴此代码

public function handle(Request $request, Closure $next): Response
{
    if(Auth::check()){
        $user = \auth()->user();
        $tenant = $user->tenant;
        if($tenant){
            Tenancy::initialize($tenant);
        }
    }else{
        return Redirect::route("login");
    }

    return $next($request);
}

web.php 中,所有路由都属于 web.php 底部的中心,粘贴此代码。这是特定的中间件,您可以将所有租户路由。

Route::middleware(["verifyTenant"])->group(function () {
    
});

这样,当您点击任何路线(可能是中心路线或租户路线)时,它就会通过中间件进行过滤和保护。

答案是学习的唯一目的,可能不是最好的解决方案。这是我的个人经验,也许我忘了提及某些事情或做错了什么,但我目前正在构建 SAAS,到目前为止我没有发现这些配置和设置有任何问题。任何建议或改进都是受欢迎的。抱歉我的英语不好:)

© www.soinside.com 2019 - 2024. All rights reserved.