techsemicolon/laravel-dynamic-user-connection

一个laravel包,为每个用户动态设置独立的数据库连接。

2.0.0 2019-02-04 11:18 UTC

This package is auto-updated.

Last update: 2024-09-05 00:15:12 UTC


README

如果您需要为每个用户设置独立的数据库,那么您就找到了正确的位置。这是一个laravel包,可以帮助您在几秒钟内设置动态的用户数据库连接。

安装

composer require techsemicolon/laravel-dynamic-user-connection

然后在 config/app.phpproviders 数组中添加 DynamicConnectionServiceProvider 条目

Techsemicolon\DynamicConnection\DynamicConnectionServiceProvider::class,

工作原理

您应该有一个基本的mysql数据库集合,其中包含 users 表。基本的登录验证将像往常一样工作。

一旦用户登录,该包就会介入,并根据 App\User.php 模型中的相关设置切换数据库。

使用方法

该包期望您将这些详细信息保存到 users 表中。包需要的是存储动态用户连接信息的列名。

您可以在 App\User.php 模型中添加以下公共属性来设置数据库

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{

    public $dynamic_connection_database = 'database_name';
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [

        'password', 'remember_token',
    ];

}

上述设置将 users 表中 database_name 列中存储的字符串值作为该用户连接的数据库名称。

您还可以选择指定用户名和密码列

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    public $dynamic_connection_database = 'database_name';

    // Optional
    public $dynamic_connection_username = 'database_username';
    public $dynamic_connection_password = 'database_password';

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [

        'password', 'remember_token',
    ];

}

注意:您需要使用laravel的 decrypt() 助手对 database_password 列的值进行解密(),在存储到 users 表中。这是因为在数据库中直接存储密码字符串是不安全的。

如果密码不可解密,则包会抛出 DynamicConnectionInvalidPasswordException

许可协议

此包是开源软件,根据MIT许可证授权