Наследование WebUser


Иногда приходится расширять WebUser, чтобы добавить новый функционал

class MyWebUser extends CWebUser {

    // Store model
    private $_user = null;

    protected function afterLogin($cookie)
    {
        $u = $this->model;
        if (!is_null($u)) {
            $u->fixLastVisit();
        }
    }

    protected function afterLogout()
    {
        $this->_user = null;
    }

    public function getModel()
    {
        if ($this->_user===null && !Yii::app()->user->isGuest) {
            $this->_user=User::model()->findByPk(Yii::app()->user->id);
            $test = $this->_user->validateActive();
            if (!$test) {
                $this->logout();
                Yii::app()->request->redirect(Yii::app()->homeUrl,true);
                Yii::app()->end();
            }
        }
        return $this->_user;
    }

    public function check($r='')
    {
        if (!Yii::app()->user->isGuest)
            return Yii::app()->user->model->check($r);
        return false;
    }
} // class

Подключается он в config.php, в секции components:

'user'=>array(
    'class' => 'MyWebUser',
    // Cookie-based authentication
    'allowAutoLogin'=>true,
    'loginUrl'=>array('user/login'),
),