程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中Zend_Auth和Zend_Acl進行登錄認證及根據用戶角色進行權限控制 (1/4)

php中Zend_Auth和Zend_Acl進行登錄認證及根據用戶角色進行權限控制 (1/4)

編輯:關於PHP編程

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

 1 2 3 4

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved