...
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