Yii: использование базы данных модуля для контроля доступа - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь настроить отдельную базу данных для особого набора пользователей, которые будут получать доступ к моему сайту через модуль Yii, но я не могу понять, как правильно настроить конфигурацию.

Вот соответствующие файлы моего модуля heirarchy.

<code>/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

В соответствии с инструкциями здесь , я обновил свой main.config, добавив определение базы данных для конкретного модуля.

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

У меня также естьобновил мой модуль для поддержки определения базы данных, добавив public $db в SpecialModule.php, и я создал активную запись для конкретного модуля, которая использует определение базы данных.

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

Где у меня проблемы, это в модели счета.Мое основное веб-приложение также реализует модель учетных записей, и трассировка стека показывает, что модуль получает доступ ко всем файлам моего модуля через идентификатор пользователя (/protected/modules/special/components/UserIdentity.php).Однако на модель учетной записи, которая используется для авторизации, ссылаются на уровне сайта (/protected/models/Account.php).

Есть ли какие-либо идеи относительно правильного способа реализации аутентификации конкретного модуля с использованием базы данных конкретного модуля?

1 Ответ

3 голосов
/ 17 января 2012

Основываясь на сообщении на форуме на сайте Yii (которое я сейчас не могу найти), я преодолел эту проблему, добавив префиксы к своим моделям модулей - например.SAccount.php и SActiveRecord.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.'));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...