|
|
<div id="cnblogs_post_body"> 在CRM系统开发中,根据不同的用户组分配不同的权限是一件再正常不过的事情。ZF框架提供的Zend_Auth和Zend_Acl这两个组件就是用来帮我们完成类似工作的。
Zend_Auth登录认证:
Zend_Auth组件的使用很容易,相信大家看了下面的图文解说之后就会明白的。

解释:
Zend_Auth_Adapter_Interface中提供了一个接口,我们需要自己去实现
代码如下:
<div class="cnblogs_code"><?phprequire_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; }} |
|