【问题标题】:Switching Database in Eloquent Based On User's Roles基于用户角色在 Eloquent 中切换数据库
【发布时间】:2018-06-28 19:15:30
【问题描述】:

您好,在我的 lumen 应用程序中,我创建了几个用户,我想使用这些用户在我的服务器上实时执行测试事务,目前测试数据库事务与实际记录混合在一起,这在删除时真的很痛苦。

我想要做的是在用户执行操作时检查用户,如果他们是测试用户,它应该切换到我的 test_db 并将数据保存在那里。我想知道如何做到这一点,有没有办法在模型中做到这一点,以便它根据登录用户的角色选择要保存的数据库?

【问题讨论】:

  • 如何定义测试用户?通常,您会为您的实时环境单独配置一个测试/开发环境。如果您确实在实时环境中运行测试,您需要能够区分测试用户和实时用户的东西。
  • 角色。我有一个名为 Test 的角色。

标签: laravel laravel-5 lumen laravel-eloquent


【解决方案1】:

我会为此创建一个中间件,并根据角色有条件地设置数据库配置。

If (auth()->user->role === 'test') {
    config(['database.connection.default' => [...test connection config]]);
}

在请求生命周期的早期执行此操作。

【讨论】:

  • 太棒了!这看起来是我的问题的正确解决方案,将检查一下! :D
  • 我已经在几个生产应用程序中使用了这种方法。它被证明是一个非常优雅和可靠的解决方案。应该也适合你=D
【解决方案2】:

在您的模型中,您可以定义用于该模型的数据库;

 protected $connection = 'connection1';

或者,如果您在控制器上运行期间使用多个连接,请在您的模型上设置一个函数来更改连接

public function changeConnection($conn)
{
   $this->connection = $conn;
}

在控制器中你可以这样做:

if($user->role=='test'){
      $user->changeConnection('connection2');
}

另一种解决方案是使用中间件

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2011-08-25
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多