`
hudeyong926
  • 浏览: 2031598 次
  • 来自: 武汉
社区版块
存档分类
最新评论

YII 存放登录信息的类

 
阅读更多

如果在用户登录后想额外调用除 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('*'),
        ),
    
    );
}

 

 
 
分享到:
评论
1 楼 uiexp 2012-01-09  
              

相关推荐

    新下载的yii2,yii framework

    5. **vendor**:Composer依赖管理器自动下载的第三方库和Yii框架本身都存放在这里。 6. **runtime**:运行时目录,框架在此生成临时文件,如日志、缓存等。 7. **web**:Web应用的入口点,包含`index.php`,它是Web...

    yii框架源代码

    9. **扩展性**:Yii的插件和模块系统允许开发者轻松添加新的功能,`CModule`类是模块的基类,` yiisoft/extensions `目录存放第三方扩展。 通过对Yii 1.1.14源代码的深入学习,开发者不仅可以提升自己的PHP编程技巧...

    Yii-Bootstrap插件

    3. **assets**: 在Yii中,assets目录通常用于存放JavaScript和CSS文件,以及它们的依赖项。在这个插件中,assets目录可能包含Bootstrap的CSS和JS文件,以及任何其他必要的资源文件,确保在页面上正确应用Bootstrap...

    php yii2框架 医疗平台

    - models:存放数据库模型类 - views:包含各个页面的视图模板 - controllers:管理不同功能的控制器 - config:配置文件,如数据库连接信息 - migrations:数据库迁移文件,用于版本控制 - runtime:运行时生成的...

    yii-1.1.13源码

    `yiisoft/yii/framework/controllers`包含控制器基类,`yiisoft/yii/framework/views`存储视图文件,`yiisoft/yii/framework/models`存放模型类。 3. **组件化**:Yii的组件系统允许开发者重用代码并实现灵活配置。...

    php yii源码分析

    Yii 提供了内置的错误处理和日志系统,允许开发者捕获和记录异常,以及按照配置级别输出日志信息。 通过对 Yii 框架源码的深入分析,我们可以更好地理解其工作原理,这对于优化性能、调试问题以及自定义扩展具有极...

    Yii写的CMS系统

    1. `protected/config/main.php`: 这是Yii框架的主要配置文件,其中包含了数据库连接信息、RBAC组件设置以及其他应用配置。 2. `protected/extensions`: 可能包含自定义或第三方的扩展,这些扩展可能为CMS系统提供...

    YII框架应用

    如果一切正常,将会出现提示信息,告知服务器配置已达到运行YII的要求。如果提示不符合要求,则需要对服务器配置进行相应的调整。 ##### 2.2 框架安装 文档中提到的YII框架版本为`yii-1.1.6.r2877`。安装过程包括...

    YII配置详解以及开发规范

    Yii 的命名约定清晰,类前缀为 "C"(接口为 "I"),以减少类名冲突。此外,Yii 充分利用 PHP 的命名空间和自动加载机制,提高代码组织的灵活性。 CComponent 是 Yii 中所有类的基类,提供事件和行为机制,使得扩展...

    yii-advanced-app-2.0.10.tgz

    6. **vendor**:第三方库和依赖包的存放地,由 Composer 管理。 7. **environments**:不同部署环境的配置模板,可以根据需要调整。 8. **tests**:测试目录,包含单元测试和集成测试用例。 9. **.gitignore** 和...

    yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信

    最后,`runtime`目录是Yii2的运行时目录,存放临时文件、日志等。在异步任务执行过程中,可能会生成一些临时文件或记录日志,这些都会被保存在这个目录下。 总之,通过Yii2 Console集成Swoole,我们可以充分利用...

    Yii2.0高级应用模板

    - `vendor`:存放第三方库和Yii框架本身。 - `config`:存储各种配置文件,如数据库连接、路由规则等。 - `runtime`:运行时生成的文件,如日志、session和缓存。 - `web`:部署到Web服务器的目录,包含入口脚本和...

    yii 自定义widget地址联动

    1. 创建一个新的PHP类,继承自`\yii\base\Widget`或`\yii\widgets\BaseWidget`。 2. 在类中定义属性,可以通过`public $property`声明。 3. 实现构造函数,设置默认属性值。 4. 定义`init()`方法,用于在Widget实例...

    yii-advanced-app-2.0.4

    6. **vendor**:第三方库和 Composer 包的存放地,Yii 框架自身也位于此处。 7. **runtime**:运行时目录,存放临时文件,如日志、缓存等。 8. **tests**:测试目录,包含单元测试和集成测试的相关文件。 安装和...

    Yii中文教程.doc

    在新建的应用中,yiic 自动生成了基本的目录结构和文件,包括首页、联系页和登录页。这些页面展示了应用的基本功能,如用户认证和表单提交。 Yii 应用的目录结构通常如下: - `index.php`:Web 应用的入口脚本。 -...

    Yii框架执行流程及部分源码分析

    `CApplication`是Yii框架的核心类,负责管理应用的生命周期。构造函数中,它会执行以下操作: - 解析配置,创建组件实例。 - 加载组件的配置。 - 注册错误处理和异常处理机制。 - 初始化Yii的类自动加载器。 -...

    yii-sae-app

    在这个目录下,通常会有`config`、`protected`、`runtime`、`webroot`等文件夹,分别存放配置文件、应用逻辑、运行时生成的文件和前端资源。通过研究这些文件,我们可以深入了解如何构建和部署一个在SAE上的Yii应用...

    yii-basic-app-2.0.36.tgz

    - **models**:存放模型类,用于处理业务逻辑和数据操作。 - **views**:存放视图文件,定义用户界面布局。 - **web**:包含Web服务器需要的公共文件,如index.php入口文件和静态资源。 - **vendor**:存放第三...

    Yii Blog Book

    - **OOP基础**:面向对象编程的基本概念,如类、对象、继承、封装等。 - **数据库编程**:SQL语言的基础,如数据表的创建、查询、更新等操作。 - **Yii文档阅读**:深入理解Yii框架的官方文档和API手册,以便更好地...

Global site tag (gtag.js) - Google Analytics