如果在用户登录后想额外调用除 user,id之外的数据库变量,可以这样设置:
在登陆验证时候增加额外项:Yii::app()->user->last_login_time
在UserIdentity.php中
Java代码 收藏代码
class UserIdentity extends CUserIdentity
{
$this->setState('last_login_time',$user->last_login_time);
}
如此,在应用程序的任何地方,这个属性可以通过如下获取:Yii::app()->user->last_login_time
再重新登录看看,
Java代码 收藏代码
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中定义
Java代码 收藏代码
'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类例子:
Java代码 收藏代码
<?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
Java代码 收藏代码
<?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];
}
}
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
Java代码 收藏代码
<?php
'components'=>array(
'user'=>array(
'class'=>'WebUser',
)
)
?>
调用方法
Yii::app()->user->getIsGuest()
2用户信息存到单独的文件
Java代码 收藏代码
<?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
Java代码 收藏代码
<?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
Java代码 收藏代码
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('*'),
),
);
}