首页 > php框架 > php中Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 (1/4)

php中Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 (1/4)

[导读] Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 有需要的朋友可参考一下。Zend_Auth_Adapter_Interface中提供了一个接口,我们需要自己去实现代码如下: 代码如下复制代码 Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 有需要的朋友可参考一下。

Zend_Auth_Adapter_Interface中提供了一个接口,我们需要自己去实现

代码如下:

<?php
require_once 'Zend/Auth/Adapter/Interface.php';
class Auth implements Zend_Auth_Adapter_Interface {
    private $_useraccount;
    private $_password;
    private $_db;
    /**
     * 构造函数 设置用户名和密码 数据连接对象
     *
     * @return void
     */
    public function __construct($useraccount, $password, $db) {
        $this->_useraccount = $useraccount;
        $this->_password = $password;
        $this->_db = $db;
    }
    /**     
     * 进行认证
     * @throws Zend_Auth_Adapter_Exception
     * @return Zend_Auth_Result
     *
     */
    public function authenticate() {
        //默认情况下是认证失败
        $authResult = array(
            'code' => Zend_Auth_Result::FAILURE, //详参:Zend_Auth_Result
            'identity' => '',
            'info' => array()
        );
        //获得登录用户信息
        $result = $this->_getAccountData();
        if (isset($result) && !empty($result)) { //认证成功,则将用户信息存储到session中
            $authResult = array(
                'code' => Zend_Auth_Result::SUCCESS,
                'identity' => $result['name'],
                'info' => array(
                    'status' => $result['status']
                )
            );
            //角色存储  个人缓存空间
            $namespace = Zend_Auth::getInstance() //单例模式
            ->getStorage()->getNamespace();
            $_SESSION[$namespace]['role'] = $result['group_id']; //所属用户组
            $_SESSION[$namespace]['userInfo'] = $result;
            $_SESSION[$namespace]['userInfo']['lastLoginTime'] = $result['login_time'];
            $_SESSION[$namespace]['userInfo']['lastLoginIp'] = $result['login_ip'];
            //            $_SESSION[$namespace]['userInfo']['password']   = $result['password'];//密码是很重要的,不要写到session中
            
        }
        return new Zend_Auth_Result($authResult['code'], $authResult['identity'], $authResult['info']);
    }
    /**
     * 用户密码加密
     * @param $pwd  原始密码
     * @return string  加密后的密码字符串
     *
     */
    static public function encryptionType($pwd = null) {
        $pwd = md5($pwd);
        return $pwd;
    }
    /**
     * 获得用户数据结构
     *
     * @todo 整理密码的公共类
     */
    private function _getAccountData() {
        $resArr = array();
        $sysUserObj = Base_Dao_Factory::getObject('Admin_Models_User');
        //先登录普通会员帐号
        $data = array(
            'login_name' => $this->_useraccount,
            'login_pwd' => $this->encryptionType($this->_password)
        );
        $result = $sysUserObj->login($data);
        //判断是否有数据,是则赋值
        if ($result) {
            if (!empty($result[0])) {
                $resArr = $result[0];
            }
        }
        return $resArr;
    }
}
?>

解释:在authenticate方法的实现代码中,return一个Zend_Auth_Result对象实例,而查看Zend_Auth_Result的源代码,知道实例化的时候需要传入三个参数:

 @param int $code            身份认证的结果(如:Zend_Auth_Result::SUCCESS)

 @param mixed $identity   用于身份认证的标示符(如:登录名(张三))

 @param array $messages 认证失败的原因数组

而一旦认证成功,则将信息存储到session变量中。


本文地址:http://www.phprm.com/frame/php1005302.html

转载随意,但请附上文章地址:-)

标签:none

发表留言