UsersManager.php

浏览该文件的文档。
00001 <?php
00003 // FleaPHP Framework
00004 //
00005 // Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com)
00006 //
00007 // 许可协议,请查看源代码中附带的 LICENSE.txt 文件,
00008 // 或者访问 http://www.fleaphp.org/ 获得详细信息。
00010 
00020 // {{{ constants
00024 define('PWD_MD5',       1);
00025 define('PWD_CRYPT',     2);
00026 define('PWD_CLEARTEXT', 3);
00027 define('PWD_SHA1',      4);
00028 define('PWD_SHA2',      5);
00029 // }}}
00030 
00031 // {{{ includes
00032 FLEA::loadClass('FLEA_Db_TableDataGateway');
00033 // }}}
00034 
00044 class FLEA_Rbac_UsersManager extends FLEA_Db_TableDataGateway
00045 {
00051     var $primaryKey = 'user_id';
00052 
00058     var $tableName = 'users';
00059 
00065     var $usernameField = 'username';
00066 
00072     var $emailField = 'email';
00073 
00079     var $passwordField = 'password';
00080 
00086     var $rolesField = 'roles';
00087 
00093     var $encodeMethod = PWD_CRYPT;
00094 
00100     var $autoValidating = true;
00101 
00107     var $functionFields = array(
00108         'registerIpField' => null,
00109         'lastLoginField' => null,
00110         'lastLoginIpField' => null,
00111         'loginCountField' => null,
00112         'isLockedField' => null,
00113     );
00114 
00118     function FLEA_Rbac_UsersManager()
00119     {
00120         parent::FLEA_Db_TableDataGateway();
00121         $mn = strtoupper($this->emailField);
00122         if (isset($this->meta[$mn])) {
00123             $this->meta[$mn]['complexType'] = 'EMAIL';
00124         }
00125     }
00126 
00135     function findByUserId($id, $fields = '*')
00136     {
00137         return $this->findByField($this->primaryKey, $id, null, $fields);
00138     }
00139 
00148     function findByUsername($username, $fields = '*')
00149     {
00150         return $this->findByField($this->usernameField, $username, null, $fields);
00151     }
00152 
00161     function findByEmail($email, $fields = '*')
00162     {
00163         return $this->findByField($this->emailField, $email, null, $fields);
00164     }
00165 
00173     function existsUserId($id)
00174     {
00175         return $this->findCount(array($this->primaryKey => $id)) > 0;
00176     }
00177 
00185     function existsUsername($username)
00186     {
00187         return $this->findCount(array($this->usernameField => $username)) > 0;
00188     }
00189 
00197     function existsEmail($email)
00198     {
00199         return $this->findCount(array($this->emailField => $email)) > 0;
00200     }
00201 
00209     function create(& $row)
00210     {
00211         if (isset($this->functionFields['registerIpField'])
00212             && $this->functionFields['registerIpField'] != '')
00213         {
00214             $row[$this->functionFields['registerIpField']] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';
00215         }
00216         return parent::create($row);
00217     }
00218 
00230     function validateUser($username, $password, $returnUserdata = false)
00231     {
00232         if ($returnUserdata) {
00233             $user = $this->findByField($this->usernameField, $username);
00234         } else {
00235             $fields = array($this->primaryKey, $this->passwordField);
00236             if (isset($this->functionFields['loginCountField'])
00237                 && $this->functionFields['loginCountField'] != '')
00238             {
00239                 $fields[] = $this->functionFields['loginCountField'];
00240             }
00241             if (isset($this->functionFields['isLockedField'])
00242                 && $this->functionFields['isLockedField'] != '')
00243             {
00244                 $fields[] = $this->functionFields['isLockedField'];
00245             }
00246             $user = $this->findByField($this->usernameField, $username, null, $fields);
00247         }
00248         if (!$user) { return false; }
00249         if (isset($this->functionFields['isLockedField'])
00250             && $this->functionFields['isLockedField'] != '')
00251         {
00252             if ($user[$this->functionFields['isLockedField']]) {
00253                 return false;
00254             }
00255         }
00256         if (!$this->checkPassword($password, $user[$this->passwordField])) {
00257             return false;
00258         }
00259 
00260         $update = array();
00261 
00262         if (isset($this->functionFields['lastLoginField'])
00263             && $this->functionFields['lastLoginField'] != '')
00264         {
00265             $update[$this->functionFields['lastLoginField']] = time();
00266         }
00267 
00268         if (isset($this->functionFields['lastLoginIpField'])
00269             && $this->functionFields['lastLoginIpField'] != '')
00270         {
00271             $update[$this->functionFields['lastLoginIpField']] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';
00272         }
00273 
00274         if (isset($this->functionFields['loginCountField'])
00275             && $this->functionFields['loginCountField'] != '')
00276         {
00277             $update[$this->functionFields['loginCountField']] = $user[$this->functionFields['loginCountField']] + 1;
00278         }
00279 
00280         if (!empty($update)) {
00281             $update[$this->primaryKey] = $user[$this->primaryKey];
00282             $this->update($update);
00283         }
00284 
00285         if ($returnUserdata) { return $user; }
00286         return true;
00287     }
00288 
00300     function changePassword($username, $oldPassword, $newPassword)
00301     {
00302         $user = $this->findByField(
00303             $this->usernameField, $username, null,
00304             array($this->primaryKey, $this->passwordField)
00305         );
00306         if (!$user) { return false; }
00307         if (!$this->checkPassword($oldPassword, $user[$this->passwordField])) {
00308             return false;
00309         }
00310 
00311         $user[$this->passwordField] = $newPassword;
00312         return parent::update($user);
00313     }
00314 
00323     function updatePassword($username, $newPassword)
00324     {
00325         $user = $this->findByField($this->usernameField, $username, null, $this->primaryKey);
00326         if (!$user) { return false; }
00327 
00328         $user[$this->passwordField] = $newPassword;
00329         return parent::update($user);
00330     }
00331 
00340     function updatePasswordById($userid, $newPassword)
00341     {
00342         $user = $this->findByField($this->primaryKey, $userid, null, $this->primaryKey);
00343         if (!$user) { return false; }
00344 
00345         $user[$this->passwordField] = $newPassword;
00346         return parent::update($user);
00347     }
00348 
00359     function checkPassword($cleartext, $cryptograph)
00360     {
00361         switch ($this->encodeMethod) {
00362         case PWD_MD5:
00363             return (md5($cleartext) == rtrim($cryptograph));
00364         case PWD_CRYPT:
00365             return (crypt($cleartext, $cryptograph) == rtrim($cryptograph));
00366         case PWD_CLEARTEXT:
00367             return ($cleartext == rtrim($cryptograph));
00368         case PWD_SHA1:
00369             return (sha1($cleartext) == rtrim($cryptograph));
00370         case PWD_SHA2:
00371             return (hash('sha512', $cleartext) == rtrim($cryptograph));
00372 
00373         default:
00374             return false;
00375         }
00376     }
00377 
00387     function encodePassword($cleartext)
00388     {
00389         switch ($this->encodeMethod) {
00390         case PWD_MD5:
00391             return md5($cleartext);
00392         case PWD_CRYPT:
00393             return crypt($cleartext);
00394         case PWD_CLEARTEXT:
00395             return $cleartext;
00396         case PWD_SHA1:
00397             return sha1($cleartext);
00398         case PWD_SHA2:
00399             return hash('sha512', $cleartext);
00400 
00401         default:
00402             return false;
00403         }
00404     }
00405 
00414     function fetchRoles(& $user, $rolenameField = 'rolename')
00415     {
00416         if (!isset($user[$this->rolesField]) ||
00417             !is_array($user[$this->rolesField])) {
00418             return array();
00419         }
00420         $roles = array();
00421         foreach ($user[$this->rolesField] as $role) {
00422             if (!is_array($role)) {
00423                 return array($user[$this->rolesField][$rolenameField]);
00424             }
00425             $roles[] = $role[$rolenameField];
00426         }
00427         return $roles;
00428     }
00429 
00437     function update(& $row)
00438     {
00439         unset($row[$this->passwordField]);
00440         return parent::update($row);
00441     }
00442 
00446     function _beforeUpdateDb(& $row)
00447     {
00448         $this->_encodeRecordPassword($row);
00449         return true;
00450     }
00451 
00455     function _beforeCreateDb(& $row)
00456     {
00457         $this->_encodeRecordPassword($row);
00458         return true;
00459     }
00460 
00466     function _encodeRecordPassword(& $row)
00467     {
00468         if (isset($row[$this->passwordField])) {
00469             $row[$this->passwordField] =
00470                 $this->encodePassword($row[$this->passwordField]);
00471         }
00472     }
00473 }

Generated at Sat Feb 2 15:18:51 2008 for FleaPHP by  doxygen 1.5.3