六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

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

[复制链接]

升级  11.75%

405

主题

405

主题

405

主题

探花

Rank: 6Rank: 6

积分
1235
 楼主| 发表于 2012-12-17 21:38:31 | 显示全部楼层 |阅读模式
<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;    }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表