首页 >后端开发 >php教程 >php中Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 (1/4)_PHP教程

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

WBOY
WBOY原创
2016-07-20 11:11:001120浏览

Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 有需要的朋友可参考一下。

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

代码如下:

 代码如下 复制代码

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变量中。

 1 2 3 4

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/444673.htmlTechArticleZend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 有需要的朋友可参考一下。 Zend_Auth_Adapter_Interface中提供了一个接口,我们需要自...
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn