По любому заинтересовавшему Вас вопросу вы можете получить консультацию по номеру 8 (8555) 42-12-97 с 9:00 до 18:00 ежедневно, кроме выходных. Также вы можете воспользоваться формой обратной связи в разделе "Контакты".

Наш офис расположен по адресу: г. Нижнекамск, сквер Лемаева, д.8

Библиотека User.php

Среда, 31 марта 2010 г.
Рубрика: Статьи -> СПО
Метки: |
Просмотров: 2791
Подписаться на комментарии по RSS

Простейшая, на мой взгляд, библиотека для работы с пользователями, под CodeIgniter, разработанная с использованием исходников от DokuWiki. Вообще из этой вики можно почерпнуть много полезного, она активно развивается, несмотря на то что не использует баз данных, а может именно по этому. Обладает большим количеством плагинов и легка в ноастройке, установке и поразительно легко переносится с места на место. Вести локальную базу знаний и документации в ней - одно удовольствие.

<?php 
/**
 * Authentication backend
 *
 * @license	GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author	Andreas Gohr <andi@splitbrain.org>
 * @author	Chris Smith <chris@jalakai.co.uk>
 * @author	Serge Telicyn <dizatorr@gmail.com> (http://unicorn.e-nk.ru)
 */
if (!defined('BASEPATH')) exit('Нет доступа к скрипту'); 
class User {
	var $CI;
	var $user_table = 'users'; //Таблица пользователей
	var $default_group = array ('user');
	var $cript_metod = 'sha1';
	var $users = null;
	var $USERINFO = null;
	var $error_info = null;
	function User()
	{
		$this->__constructor(); 
	}
 
	function __constructor()
	{
 
 		$this->CI =& get_instance();
		//$this->CI->
 		if (!$this->CI->db->table_exists($this->user_table))
 		{
			$this->error_info = 'Таблица '.$this->user_table.' не найдена' ;
			//Create Table можно вынести в инсталятор
			$this->CI->load->dbforge();
			$fields = array(
				'pass' => array('type' => 'TEXT'),
				'user' => array('type' => 'varchar','constraint' => '100'), // Login
				'realname' => array('type' => 'TEXT'),
				'mail' => array('type' => 'varchar','constraint' => '100'),
				'grps' => array('type' => 'TEXT'),
				'blocked' => array('type' =>'INT', 'constraint' => '1', 'default' => '0' )
			);
			$this->CI->dbforge->add_field('id');
			$this->CI->dbforge->add_field($fields);
			if (!$this->CI->dbforge->create_table($this->user_table))
			{
				$this->error_info .= ' Попытка создания таблицы не удалась';
			}
 		}
		$this->_loadUserData(); // А надо ли?
		$this->error_info = 'Модуль авторизации удачно загружен';
	}
 
	function login($user = '', $pass = '') 
	{
		$this->CI->load->library('session');
		if (!$this->CI->session->userdata('user'))
		{
			if(!empty($user) OR !empty($pass)) 
			{
				if ($this->checkPass($user,$pass))
				{
					$cessionData['user'] = $this->info($user);
					$this->CI->session->set_userdata($cessionData); 
					$this->error_info = 'Пользователь удачно вошел в систему';
					return true;
				}
				$this->error_info = 'Пользователь не неайден';
				return false;
			}
			$this->error_info = 'Неверно введены данные';
			return false;
		}
		$this->error_info = 'Пользователь уже вошел в систему';
		return false;
	}
 
	function error()
	{
		return $this->error_info;
	}
 
	function logout() 
	{
		$this->CI->load->library('session');
		$this->CI->session->unset_userdata('user');
	}
 
	function auth_browseruid()
	{
		$uid  = '';
		$uid .= $_SERVER['HTTP_USER_AGENT'];
		$uid .= $_SERVER['HTTP_ACCEPT_ENCODING'];
		$uid .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
		$uid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
		$uid .= substr($_SERVER['REMOTE_ADDR'],0,strpos($_SERVER['REMOTE_ADDR'],'.'));
		return md5($uid);
	}
 
	function create($user,$pass,$mail,$realname = '',$grps=null)
	{
		$blocked = 0;
		// user mustn't already exist
		if ($this->info($user) !== false) return false;
 
		$pass = $this->auth_cryptPassword($pass);
 
		// set default group if no groups specified
		if (!is_array($grps)) $grps = $this->default_group;
 
		// prepare user line
		$groups = join(',',$grps);
		$data = array(
		'user' => $user,
		'realname' => $realname,
		'pass' => $pass,
		'mail'=>$mail,
		'grps'=>$groups,
		'blocked' => $blocked
		);
		$this->CI->db->set($data); 
		if(!$this->CI->db->insert($this->user_table)) 
		{
			//There was a problem!
			return false;
		} 
		$this->users[$user] = compact('user', 'pass','realname','mail','grps', 'blocked');
		return $pass;
	}
 
	/**
	*  Remove one or more users from the list of registered users
	*
	*  @author  Christopher Smith <chris@jalakai.co.uk>
	*  @param   array  $users   array of users to be deleted
	*  @return  int             the number of users deleted
	*/
	function delete($users) 
	{
		if (!is_array($users) || empty($users)) return 0;
 
		if ($this->users === null) $this->_loadUserData();
 
		$deleted = array();
		foreach ($users as $user) 
		{
			if (isset($this->users[$user])) $deleted[] = $user;
		}
 
		if (empty($deleted)) return 0;
 
		$this->CI->db->where_in('user', $deleted);
		if ($this->CI->db->delete($this->user_table))
		{
			foreach ($deleted as $user) unset($this->users[$user]);
			return count($deleted);
		}
		return 0;
	}
 
	function blokc ($users)
	{
		if (empty($users)) return 0;
		if (is_array($users))
		{
			foreach ($users as $key=>$user)
			{
				if ($key === 0) 
				{
					$this->CI->db->where('user =', $user);
				}else
				{
					$this->CI->db->or_where('user =', $user);
				}
			}
		} else $this->CI->db->where('user =', $users);
		$data = array ('blocked' => 1);
		$this->CI->db->update($this->user_table, $data); 
	}
 
	function checkPass($user,$pass)
	{
		$userinfo = $this->info($user);
		if ($userinfo === false) return false;
		return $this->auth_verifyPassword($pass,$this->users[$user]['pass']);
	}
 
	function info($user)
	{
		if($this->users === null) $this->_loadUserData();
		return isset($this->users[$user]) ? $this->users[$user] : false;
	}
 
	function auth_cryptPassword($clear, $salt='', $method = FALSE)
	{
		if (!$method) $method = $this->cript_metod;
 
		//prepare a salt
		if(empty($salt)) $salt = md5(uniqid(rand(), true));
		switch(strtolower($method))
		{
			case 'smd5':
				return crypt($clear,'$1$'.substr($salt,0,8).'$');
			case 'md5':
				return md5($clear);
			case 'sha1':
				return sha1($clear);
			case 'ssha':
				$salt=substr($salt,0,4);
				return '{SSHA}'.base64_encode(pack("H*", sha1($clear.$salt)).$salt);
			case 'crypt':
				return crypt($clear,substr($salt,0,2));
			case 'mysql':
				//from http://www.php.net/mysql comment by <soren at byu dot edu>
				$nr=0x50305735;
				$nr2=0x12345671;
				$add=7;
				$charArr = preg_split("//", $clear);
				foreach ($charArr as $char) 
				{
					if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
					$charVal = ord($char);
					$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
					$nr2 += ($nr2 << 8) ^ $nr;
					$add += $charVal;
				}
				return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
			case 'my411':
				return '*'.sha1(pack("H*", sha1($clear)));
			default:
				$this->error_info =  "Неизвесный метод шифрования $method";
				return FALSE;
		}
	}
 
	function auth_verifyPassword($clear,$crypt)
	{
		$method=$this->cript_metod;
		$salt='';
 
		//determine the used method and salt
		$len = strlen($crypt);
		if(substr($crypt,0,3) == '$1$')
		{
			$method = 'smd5';
			$salt   = substr($crypt,3,8);
		}elseif(substr($crypt,0,6) == '{SSHA}')
		{
			$method = 'ssha';
			$salt   = substr(base64_decode(substr($crypt, 6)),20);
		}elseif($len == 32)
		{
			$method = 'md5';
		}elseif($len == 40)
		{
			$method = 'sha1';
		}elseif($len == 16)
		{
			$method = 'mysql';
		}elseif($len == 41 && $crypt[0] == '*')
		{
			$method = 'my411';
		}else
		{
			$method = 'crypt';
			$salt   = substr($crypt,0,2);
		}
		//crypt and compare
		if($this->auth_cryptPassword($clear, $salt, $method) === $crypt)
		{
			return true;
		}
		return false;
	}
 
	function _loadUserData()
	{
		//$this->CI =& get_instance();
		$this->users = array();
		$query = $this->CI->db->get($this->user_table);
		$table = $query->result_array();
		//print_r($table);
		foreach($table as $line)
		{
			$this->users[$line['user']]['user'] = urldecode($line['user']);
			$this->users[$line['user']]['pass'] = $line['pass'];
			$this->users[$line['user']]['mail'] = $line['mail'];
			$this->users[$line['user']]['realname'] = $line['realname'];
			$this->users[$line['user']]['grps'] = split(",",$line['grps']);
			$this->users[$line['user']]['blocked'] = $line['blocked'];
		}
		//print_r($this->users);
	}
 
}
?>
]]>twitter.com facebook Вконтакте Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)

Здесь бесплатно скачать mp3 нельзя, или скачать видео фильм бесплатно, тоже нельзя. И 1с или 1c скачать нельзя.