【发布时间】:2016-12-22 14:53:50
【问题描述】:
我正在使用 Yii2 构建应用程序,并且正在使用多租户架构。所以......每个客户都有自己的数据库(相同的结构)。
到目前为止我做了什么:
- 我在 config/web.php 文件中声明了所有不同的数据库
- 我有一个主数据库,将每个用户对应到他的数据库。因此,当有人登录时,应用知道应该使用哪个数据库。
我做了什么但我不确定:
我用以下代码创建了一个文件 components/ActiveRecord.php:
<?php
namespace app\components;
use Yii;
class ActiveRecord extends \yii\db\ActiveRecord {
public static function getDb() {
if (isset($_SESSION['userdb'])) {
$currentDB = $_SESSION['userdb'];
return Yii::$app->get($currentDB);
}
}
}?>
所以...登录时,我将数据库保存在会话中,并在上述扩展默认 ActiveRecord 的文件中,我覆盖了 getDb 函数并选择了我自己的。随后,我更改了所有模型,以便它们扩展我的 ActiveRecord。
我不确定这个策略是否正确,但它几乎可以工作。
问题出在哪里:
除了... RBAC,一切正常!对于 RBAC,我使用 yii2-rbac 扩展。问题是用户不是从他的数据库中获取他的角色,而是从 config/web.php 文件中第一个声明的数据库中获取他的角色。因此,无论登录用户如何,都会使用第一个数据库。
问题:
- 我该如何解决这个问题?您知道将角色授予登录用户的文件在哪里吗?
- 额外问题:您认为这种策略是错误的吗?如果是这样,您有什么建议?
非常感谢您的宝贵时间和支持。
【问题讨论】:
标签: yii2 multi-tenant