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