如果在用户登录后想额外调用除 user,id之外的数据库变量,可以这样设置:
在登陆验证时候增加额外项:
在UserIdentity.php中
- class UserIdentity extends CUserIdentity{
- $this->setState('last_login_time',$user->last_login_time);
- }
如此,在应用程序的任何地方,这个属性可以通过如下获取:Yii::app()->user->getState('last_login_time')
再重新登录看看,
- public function setState($key, $value, $defaultValue = null) {
- $key = $this->getStateKeyPrefix() . $key;
- if ($value === $defaultValue)
- unset($_SESSION[$key]);
- else
- $_SESSION[$key] = $value;
- }
其实他将信息放到session中了
其中的user是yii的一个components.需要在protected/config/main.php中定义
- 'user'=>array(
- // enable cookie-based authentication
- 'allowAutoLogin'=>true,
- 'loginUrl' => array('site/login'),
- ),
通过扩展CWebUser添加信息到Yii:app()->user
步骤:1、添加$user属性到UserIdentity类。 添加getUser()方法-getter上面这个属性。加setUser($user)方法-setter上面这个属性,它可以赋值给user的信息通过$user这个属性。
用户信息存到数据库表里
我的UserIdentity类例子:
- <?php
- class UserIdentity extends CUserIdentity {
- /**
- * User's attributes
- * @var array
- */
- public $user;
- public function authenticate() {
- $this->errorCode = self::ERROR_PASSWORD_INVALID;
- $user = User::model()->findByAttributes(array('email' => CHtml::encode($this->username)));
- if ($user) {
- if ($user->password === md5($user->salt . $this->password)) {
- $this->errorCode = self::ERROR_NONE;
- $this->setUser($user);
- }
- }
- unset($user);
- return !$this->errorCode;
- }
- public function getUser() {
- return $this->user;
- }
- public function setUser(CActiveRecord $user) {
- $this->user = $user->attributes;
- }
- }
- ?>
现在用户的属性已经设置,创建WebUser类并把它放在/protected/components
- <?php
- class WebUser extends CWebUser {
- public function __get($name) {
- if ($this->hasState('__userInfo')) {
- $user = $this->getState('__userInfo', array());
- if (isset($user[$name])) {
- return $user[$name];
- }
- }
- //this method can user Yii::app()->user->{$user的attribute}
- return parent::__get($name);
- }
- public function login($identity, $duration) {
- $this->setState('__userInfo', $identity->getUser());
- parent::login($identity, $duration);
- }
- public function getIsGuest() {
- $customer = Yii::app()->session->get('customer');
- return $customer === null || $customer['id'] === null;
- }
- }
- ?>
记得设置一下这个类Yii::app()->user
- <?php
- 'components'=>array(
- 'user'=>array(
- 'class'=>'WebUser',
- )
- )
- ?>
调用方法
Yii::app()->user->getIsGuest()
Yii::app()->user->__userInfo;
2用户信息存到单独的文件
- <?php
- class WebUser extends CWebUser
- {
- public function getReturnUrl($defaultUrl=null)
- {
- $userInfo = $this->getUserInfo();
- if(isset($userInfo['url'])){
- return $userInfo['url'];
- }
- return parent::getReturnUrl($defaultUrl);
- }
- protected function afterLogin($fromCookie)
- {
- parent::afterLogin($fromCookie);
- $users = require(dirname(__FILE__) . '/../config/password.php');
- $this->setState('userInfo',$users[$this->getName()]);
- }
- public function getUserInfo()
- {
- return $this->getState('userInfo',array());
- }
- //accessRules roles
- public function checkAccess($operation,$params=array(),$allowCaching=true)
- {
- $userInfo = $this->getUserInfo();
- if($userInfo['group'] == $operation){
- return true;
- }
- return parent::checkAccess($operation,$params,$allowCaching);
- }
- }
password.php
- <?php
- return array(
- 'dianyin' => array(
- 'pwd' => 'dianyinXX',
- 'url' => array('dianyin/order/index'),
- 'merchant_id' => 1,
- 'group' => 'dianyin',
- ),
- 'boer' => array(
- 'pwd' => 'boerXX',
- 'url' => array('third_jifen/default/index'),
- 'merchant_id' => 1,
- 'group' => 'jifen',
- ),
- );
权限checkAccess结合roles
- public function accessRules()
- {
- return array(
- array('allow', // allow authenticated users to access all actions
- 'roles'=>array('jifen'),
- ),
- array('allow', // deny all users
- 'actions'=>array('login','logout'),
- 'users'=>array('*'),
- ),
- array('deny', // deny all users
- 'users'=>array('*'),
- ),
- );
- }