He decidido, poco a poco, ir haciendo cositas en POO... asiq, como resultado de eso, y del uso de Slim, Paris, e Idiorm, me he creado una clase "Users" para manejar los usuarios... o almenos, lo básico (crear, loguear, autentificar).
Y la verdad, yo creo q está bien hecha (en cuanto a POO, sé que queda aún validación!)
Asiq, si no es mucha molestia, la pongo aqui, y si veis algo mal hecho en POO, decídmelo!
Código PHP:
<?php
class Users extends Model {
private $_islog = false;
public function getUser($dni) {
return $this->factory('Users')->where('dni', $dni)->find_one();
}
public function logout() {
//Borramos las cookies
setcookie('login','');
setcookie('rol','');
setcookie('user', '');
//El mismo borrará los datos de la sesion al recargar la pag!
//session_unset();
}
public function islog() {
return $this->_islog;
}
//Método para loguear en el sistema
public function login($dni, $pass) {
$user = $this->getUser($dni);
if(!$user) return false; //No existe el usuario!
if(md5($pass) == $user->pass) {
$cook = $user->dni;
$cook.= $user->pass;
$rol = $user->rol;
$cookie=md5($cook.$_SERVER["REMOTE_ADDR"].$rol.'pAlABRAmagica');
setcookie('login',$cookie);
setcookie('user',$user->dni);
setcookie('rol',$rol);
return $this->getUser($dni);
}
else return false;
}
//Método para, con dos valores de las cookies, comprobar si es correcto!
public function auth($dni, $login) {
$userN = Model::factory('Users')->where_equal('dni', $dni)->find_one(); //->where_equal('pass', $pass)
if( $userN ) { //Exists
if(isset($_COOKIE['rol'])) $rol = $_COOKIE['rol'];
else $rol = '';
$cookie = md5($dni.$userN->pass.$_SERVER["REMOTE_ADDR"].$rol.'pAlABRAmagica');
if($cookie == $login) {
$this->cloneU($userN);
$this->_islog = true;
return true;
}
else {
$this->logout();
return false;
}
}
else {
$this->logout();
return false;
}
}
private function cloneU($u) {
$this->dni = $u->dni;
$this->id = $u->id;
$this->pass = $u->pass;
$this->control = $u->control;
$this->rol = $u->rol;
$this->email = $u->email;
$this->apellidos = $u->apellidos;
$this->nombre = $u->nombre;
}
public function register($nombre, $apellidos, $pass, $mail, $dni ) {
//Se carga otra instancia, pq sino sobreescribiria la que está activa y logueada... y eso NO interesa :)
$u = Model::factory('Users')->create();
$u->nombre = $nombre;
$u->apellidos = $apellidos;
$u->pass = md5($pass);
$u->email = $mail;
$u->dni = $dni;
$u->rol = 'user';
return $u->save();
}
}