How make Yii::app()->user->id read only

How make Yii::app()->user->id read only ?

Hi,

In UserIdentity Class You Need To define $_Id variable Only Private So that become read Only But Should Not Writre Any get Method For That Class

thank u …thts im looking for…

its not working…already id is private




<?php


/**

 * UserIdentity represents the data needed to identity a user.

 * It contains the authentication method that checks if the provided

 * data can identity the user.

 */

class UserIdentity extends CUserIdentity

{

	private $_id;

	const ERROR_EMAIL_INVALID=3;

	const ERROR_STATUS_NOTACTIV=4;

	const ERROR_STATUS_BAN=5;

	/**

	 * Authenticates a user.

	 * The example implementation makes sure if the username and password

	 * are both 'demo'.

	 * In practical applications, this should be changed to authenticate

	 * against some persistent user identity storage (e.g. database).

	 * @return boolean whether authentication succeeds.

	 */

	public function authenticate()

	{

		if (strpos($this->username,"@")) {

			$user=User::model()->notsafe()->findByAttributes(array('email'=>$this->username));

		} else {

			$user=User::model()->notsafe()->findByAttributes(array('username'=>$this->username));

		}

		if($user===null)

			if (strpos($this->username,"@")) {

				$this->errorCode=self::ERROR_EMAIL_INVALID;

			} else {

				$this->errorCode=self::ERROR_USERNAME_INVALID;

			}

		else if(Yii::app()->getModule('user')->encrypting($this->password)!==$user->password)

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else if($user->status==0&&Yii::app()->getModule('user')->loginNotActiv==false)

			$this->errorCode=self::ERROR_STATUS_NOTACTIV;

		else if($user->status==-1)

			$this->errorCode=self::ERROR_STATUS_BAN;

		else {

			$this->_id=$user->id;

			$this->username=$user->username;

			$this->errorCode=self::ERROR_NONE;

		}

		return !$this->errorCode;

	}

    

    /**

    * @return integer the ID of the user record

    */

	public function getId()

	{

		return $this->_id;

	}

}



Maybe:




protected $_id;




public function authenticate()

        {

                if (strpos($this->username,"@")) {

                        $user=User::model()->notsafe()->findByAttributes(array('email'=>$this->username));

                } else {

                        $user=User::model()->notsafe()->findByAttributes(array('username'=>$this->username));

                }

                if($user===null)

                        if (strpos($this->username,"@")) {

                                $this->errorCode=self::ERROR_EMAIL_INVALID;

                        } else {

                                $this->errorCode=self::ERROR_USERNAME_INVALID;

                        }

                else if(Yii::app()->getModule('user')->encrypting($this->password)!==$user->password)

                        $this->errorCode=self::ERROR_PASSWORD_INVALID;

                else if($user->status==0&&Yii::app()->getModule('user')->loginNotActiv==false)

                        $this->errorCode=self::ERROR_STATUS_NOTACTIV;

                else if($user->status==-1)

                        $this->errorCode=self::ERROR_STATUS_BAN;

                else {

                        $this->setId($user->id);// HERE!!!

                        $this->username=$user->username;

                        $this->errorCode=self::ERROR_NONE;

                }

                return !$this->errorCode;

        }




public function getId()

{

   return $this->_id;

}


protected function setId($id)

{

   $this->_id=$id;

}



ok .thank u. i will try…

it is also not working twisted1919…

i know assigning a value to Yii::app()->user->id is not a good way, but when assigning a value to Yii::app()->user->id,and then that user become the active user. !!