Nueva pregunta

Pregunta:

Fecha: 03-05-2017 21:56:22 (En Español)

Variables de sesion con roles, PDO[No resuelta]

Buenos dias tengo un sitio web redirigido por variables de sesion que funcionan perfectamente, el problema es, que quiero indicar roles, unicamente con invitado y admin me valdria.

En estos momentos pasan todos los usuarios logueados, y si no lo detecta logueado no deja pasar a la URL, pues ahroa bien necesito hacer la smodificaciones necesarias para que detecte si es invitado o admin y siendo uno u otro vaya a una URL diferente.

Usuario.php
<?php 
	/*
	*
	*
	*/
	class Usuario{
		private $id;
		private $nombre;
		private $clave;
                private $access_level;
                
                public function getaccess_level(){
			return $this->access_level;
		}

		public function setaccess_level($nivel){
			$this->access_level = $access_level;
		}

		public function getId(){
			return $this->id;
		}

		public function setId($id){
			$this->id = $id;
		}

		public function getNombre(){
			return $this->nombre;
		}

		public function setNombre($nombre){
			$this->nombre = $nombre;
		}

		public function getClave(){
			return $this->clave;
		}

		public function setClave($clave){
			$this->clave = $clave;
		}
	}
?>


Imagino que aqui arriba se deberia de declarar dos variables para la busqueda del rol.

crud_usuario.php

<?php 
	require_once('conexion.php');
	require_once('usuario.php');
	
	class CrudUsuario{

		public function __construct(){}

		//inserta los datos del usuario
		public function insertar($usuario){
			$db=DB::conectar();
			$insert=$db->prepare('INSERT INTO USERS VALUES(NULL,:nombre, :clave,"")');
			$insert->bindValue('nombre',$usuario->getNombre());
			//encripta la clave
			$pass=password_hash($usuario->getClave(),PASSWORD_DEFAULT);
			$insert->bindValue('clave',$pass);
			$insert->execute();
		}

		//obtiene el usuario para el login
		public function obtenerUsuario($nombre, $clave){
			$db=Db::conectar();
			$select=$db->prepare('SELECT * FROM USERS WHERE nombre=:nombre');//AND clave=:clave
			$select->bindValue('nombre',$nombre);
			$select->execute();
			$registro=$select->fetch();
			$usuario=new Usuario();
			//verifica si la clave es conrrecta
			if (password_verify($clave, $registro['clave'])) {				
				//si es correcta, asigna los valores que trae desde la base de datos
				$usuario->setId($registro['Id']);
				$usuario->setNombre($registro['nombre']);
				$usuario->setClave($registro['clave']);
			}			
			return $usuario;
		}

		//busca el nombre del usuario si existe
		public function buscarUsuario($nombre){
			$db=Db::conectar();
			$select=$db->prepare('SELECT * FROM USERS WHERE nombre=:nombre');
			$select->bindValue('nombre',$nombre);
			$select->execute();
			$registro=$select->fetch();
			if($registro['Id']!=NULL){
				$usado=False;
			}else{
				$usado=True;
			}	
			return $usado;
		}
	}
?>


En esta parte donde deberiamos de realizar el select para buscar el rol.

controller_login.php

<?php 
	require_once('usuario.php');
	require_once('crud_usuario.php');
	require_once('conexion.php');

	//inicio de sesion
	session_start();

	$usuario=new Usuario();
	$crud=new CrudUsuario();
	//verifica si la variable registrarse está definida
	//se da que está definicda cuando el usuario se loguea, ya que la envía en la petición
	if (isset($_POST['registrarse'])) {
		$usuario->setNombre($_POST['usuario']);
		$usuario->setClave($_POST['pas']);
		if ($crud->buscarUsuario($_POST['usuario'])) {
			$crud->insertar($usuario);
			header('Location: index.php');
		}else{
			header('Location: error.php?mensaje=El nombre de usuario ya existe');
		}		
		
	}elseif (isset($_POST['entrar'])) { //verifica si la variable entrar está definida
		$usuario=$crud->obtenerUsuario($_POST['usuario'],$_POST['pas']);
		// si el id del objeto retornado no es null, quiere decir que encontro un registro en la base
		if ($usuario->getId()!=NULL) {
			$_SESSION['usuario']=$usuario; //si el usuario se encuentra, crea la sesión de usuario
			header('Location: indexlogueado.php'); //envia a la página que simula la cuenta
		}else{
			header('Location: error.php?mensaje='); // cuando los datos son incorrectos envia a la página de error
		}
	}elseif(isset($_POST['salir'])){ // cuando presiona el botòn salir
		header('Location: index.php');
		unset($_SESSION['usuario']); //destruye la sesión
	}
?>


En este ha realizado las redirecciones.

Los campos de la tabla users son:
Id, nombre, clave, rol
Etiquetas: Base de Datos - MySQL - PHP - PHP PDO - phpMyAdmin - Sesión - Web Votos: 0 - Respuestas: 3 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  •  
      0  
     
    Fecha: 06-05-2017 17:01:13 Hola Alberto.
    Primero que nada quería aclarar que no tengo mucha experiencia en desarrollo, de hecho estoy iniciándome en esto, tal vez mi respuesta no sea muy técnica pero tal vez te sirva la idea.
    En una oportunidad hice algo parecido a lo que necesitas:
    Cree una tabla en la BD que la llame Permisos. ahi almacenaba las secciones de las paginas o partes de paginas que quería discriminar quien podía ver, y un campo del rol :
    ej:
    id, sección, rol:
    las paginas o partes de ellas las identifique con un id, luego almacenaba la bd con el nombre de la sección y el id del perfil que podía acceder a ella.
    es como crear una lista blanca de quien puede acceder a cierto lugar.
    luego en las paginas al inicio o el sector que quería controlar ponía una validación, preguntaba si el usuario que inicio sesión y de acuerdo al perfil que tenia lo validaba con la bd, comparando el nombre de la sección y el rol que tenia cuando inicia sesión, si estaba en la lista podía acceder o mostraba la parte de la pagina que estaba dentro de la condición.
    Por ejemplo una pagina donde tenia un crud, los botones de agregar, editar, borrar lo tenia encerrado en un div con un id, ese nombre estaba en la bd y podía acceder, el perfil y usuarios editores, entonces si su inicio de sesión cumplía con esto mostraba los botones, sino solo mostraba la tabla con los registros.
    Espero te sirva de algo, no se como me animé a contestar, ja ja
    Saludos...
      Votos: 0 - Link respuesta
     
  • Fecha: 12-05-2017 07:22:16 Que tal Alberto espero entender bien tu pregunta y mi respuesta es la siguiente:
    Para poder diferenciar los roles entre usuarios sugiero que en tu tabla de usuarios tegas un campo indicando el rol, al momento de loguearse un usuario haces una consulta para buscar que el usuario y password existan entonces en ésta consulta tambien debes traerte el rol y asignarlo a una variable de session por ejemplo $_SESSON['rol'] = $rol; ésto para que puedas manipularla en todo tu sitio y manipulando ésta variable mostrar u ocultar cosas según corresponda, éspero haber sido claro y oajala respondas si ya pudiste resolver ésto.
      Votos: 0 - Link respuesta
     
  • Fecha: 30-03-2018 08:26:38 Hola Ruben Osorio, me gustaria que explayaras mas tu respuesta, logro entender lo de crear nueva variable pero ayudame por favor a seguirte el paso de como llamarlo y en donde ponerlo, te lo agradeceria muchisimo.   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com