【问题标题】:Yii: using a module specific database for access controlYii:使用模块特定的数据库进行访问控制
【发布时间】:2012-01-14 19:22:22
【问题描述】:

我正在尝试为将通过 Yii 模块访问我的网站的特殊用户集建立一个单独的数据库,但我似乎无法正确配置。

这是我的模块层次结构的相关文件。

/protected/modules/special
/protected/modules/special/SpecialModule.php
/protected/modules/special/models/SpecialActiveRecord.php
/protected/modules/special/models/Account.php
/protected/modules/special/components/UserIdentity.php

根据here 的说明,我已更新我的 main.config 以包含特定于模块的数据库定义。

'modules'=>array(
    'special'=>array(
        'db'=>array(
            'connectionString'=>'mysql:dbname=specialdatabase',
            'username'=>'special',
            'password'=>'special',
        ),
    ),
),

我还更新了我的模块以通过将public $db 添加到 SpecialModule.php 来支持数据库定义,并且我创建了一个使用数据库定义的模块特定活动记录。

class SpecialActiveRecord extends CActiveRecord
{
    public function getDbConnection()
    {
        $db = Yii::app()->controller->module->db;
        return Yii::createComponent($db);
    }
}

我遇到问题的地方是帐户模型。我的主要 Web 应用程序还实现了一个帐户模型,堆栈跟踪显示该模块正在通过用户身份 (/protected/modules/special/components/UserIdentity.php) 访问我的所有模块特定文件。但是,用于授权的帐户模型是在站点级别引用的 (/protected/models/Account.php)。

关于使用模块特定数据库实现模块特定身份验证的正确方法有什么想法吗?

【问题讨论】:

    标签: database module yii access-control


    【解决方案1】:

    根据 Yii 网站上的一个论坛帖子(我现在似乎找不到),我通过在我的模块模型中添加前缀来解决这个问题——例如。 SAccount.phpSActiveRecord.php

    此外,我必须对getDbConnection 例程进行一些小的修改,以激活数据库并让一切都在 Yii 1.0 中正常工作(1.1 可能不是这种情况)。这里我修改了 CActiveRecord 类的代码。

    class SActiveRecord extends CActiveRecord
    {
        public function getDbConnection()
        {
            if(self::$db!==null)
                return self::$db;
            else
            {
                $db = Yii::app()->controller->module->db;
                self::$db=Yii::createComponent($db);
                if(self::$db instanceof CDbConnection)
                {
                    self::$db->setActive(true);
                    return self::$db;
                }
                else
                    throw new CDbException(Yii::t('yii','Special Active Record requires a "db" CDbConnection application component.'));
            }
        }
    }

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 2014-06-28
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多