WEB开发 发表于 2012-12-17 21:38:31

使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制

<div id="cnblogs_post_body">  在CRM系统开发中,根据不同的用户组分配不同的权限是一件再正常不过的事情。ZF框架提供的Zend_Auth和Zend_Acl这两个组件就是用来帮我们完成类似工作的。
Zend_Auth登录认证:  
Zend_Auth组件的使用很容易,相信大家看了下面的图文解说之后就会明白的。
http://pic002.cnblogs.com/images/2012/350329/2012091522184412.png
解释:
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])) {                $resArr = $result];            }      }      return $resArr;    }}
页: [1]
查看完整版本: 使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制