Professional Documents
Culture Documents
Segundo ejecutamos el siguiente script para definir las tablas de nuestro sistema segn
el modelo propuesto.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- ------------------------------------------------------ Table `usuarios`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `usuarios` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'LLave primaria de la tabla' ,
`nombre` VARCHAR(100) NULL COMMENT 'Nombre completo del usuario' ,
`email` VARCHAR(75) NULL COMMENT 'Login del usuario' ,
`password` VARCHAR(45) NULL COMMENT 'Clave del usuario' ,
`fecha_registro` DATETIME NULL COMMENT 'Fecha en la que se registro el
usuario' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `perfiles`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `perfiles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'llave primaria de la tabla' ,
`nombre` VARCHAR(45) NULL COMMENT 'Descripcin del perfil' ,
`fecha_registro` DATETIME NULL COMMENT 'fecha de registro' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `usuarios_perfiles`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `usuarios_perfiles` (
`usuario_id` INT NOT NULL ,
`perfil_id` INT NOT NULL ,
INDEX `fk_usuarios_perfiles_usuarios_idx` (`usuario_id` ASC) ,
INDEX `fk_usuarios_perfiles_perfiles1_idx` (`perfil_id` ASC) ,
CONSTRAINT `fk_usuarios_perfiles_usuarios`
FOREIGN KEY (`usuario_id` )
REFERENCES `usuarios` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_usuarios_perfiles_perfiles1`
FOREIGN KEY (`perfil_id` )
REFERENCES `perfiles` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `noticias`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `noticias` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'llave primaria de la tabla' ,
`usuario_id` INT NOT NULL COMMENT 'usuario que crea la noticia' ,
`titulo` VARCHAR(75) NULL COMMENT 'Titulo de la noticia' ,
`descripcin` MEDIUMTEXT NULL COMMENT 'cuerpo de la noticia' ,
`fecha_registro` DATETIME NULL COMMENT 'Fecha en la que se registro la
noticia' ,
`fecha_modificacion` DATETIME NULL COMMENT 'Fecha de la ultima modificacin' ,
`estado` TINYINT(1) NULL COMMENT 'estado de la noticia' ,
PRIMARY KEY (`id`) ,
INDEX `fk_noticias_usuarios1_idx` (`usuario_id` ASC) ,
CONSTRAINT `fk_noticias_usuarios1`
FOREIGN KEY (`usuario_id` )
REFERENCES `usuarios` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `clientes`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `clientes` (
`id` INT NOT NULL AUTO_INCREMENT,
`usuario_id` INT NOT NULL ,
`nombre` VARCHAR(45) NULL ,
`fecha_nacimiento` VARCHAR(45) NULL ,
`email` VARCHAR(45) NULL ,
`telefono` VARCHAR(45) NULL ,
`fecha_registro` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_clientes_usuarios1_idx` (`usuario_id` ASC) ,
CONSTRAINT `fk_clientes_usuarios1`
FOREIGN KEY (`usuario_id` )
REFERENCES `usuarios` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `recursos`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `recursos` (
`id` INT NOT NULL ,
`nombre` VARCHAR(100) NULL COMMENT 'nombre del recurso' ,
`fecha_registro` DATETIME NULL COMMENT 'Fecha en la que se registro el
recurso' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `perfiles_recursos`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `perfiles_recursos` (
`consultar` TINYINT(1) NULL DEFAULT 0 ,
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Ahora ingresamos a la tabla recursos para registrar los elementos que deseamos
controlar para el caso deberamos tener algo como la siguiente imagen.
Luego crearemos los usuarios del sistema a los cuales les asignaremos uno o ms
perfiles a travs de la tabla usuarios_perfiles una vez todo completo debera
quedarnos de esta manera.
Finalizando con todo lo relacionado con nuestra base de datos vamos a crear las clases y
archivos necesarios para que el sistema de validacin funcione correctamente.
1. Crearemos un directorio con el nombre configuracin podremos aqu
guardaremos los datos para ingresar a la base de datos.
2. un segundo directorio con el nombre clases donde guardaremos todo lo
relacionado con las clases de nuestro sistema.
3. Por ultimo un archivo index.php para llamar los clases y probar nuestro sistema
de permisos.
nuestro directorio nos deberia quedar de la siguiente manera.
/**
* Configuracin de la base de datos
*
* Define la configuracin para la base de datos
*
*
* @category
Configuracion
* @package
base de datos
* @copyright Copyright (c) 2014-2015 ingenieroweb.com.co
* @version
$Id:$
*/
/**
* url de la base da datos
*/
DEFINE('DB_HOSTING','localhost');
/**
* Usuario para la base de datos
*/
DEFINE('DB_USUARIO','root');
/**
* Contrasea de la base de datos
*/
DEFINE('DB_CLAVE','');
/**
* Base de datos
*/
DEFINE('DB','usuariosperfil');
mysql_select_db(DB);
/**
* funcion que ejecuta una consulta sql
* @param $Sql
*/
public function query($sql){
$this->consulta = mysql_query($sql);
}
/**
* funcion que retorna el resultado de una consulta en objetos
*/
public function obtenerObjeto(){
return mysql_fetch_object($this->consulta);
/**
* Funcion que finaliza la conexion a la base de datos
*/
public function desconectar () {
mysql_close($this->conexion);
}
}
Conexion {
* @return object|stdClass
*/
public function validarPermiso ($usuario_id = 0,$recurso_id=0){
$sql = '
/* VALIDO LAS ACCIONES DE UN USUARIO SOBRE UN RECURSO DEL SISTEMA
*/
/**
* Incluyo las librerias necesarias
*/
include('configuracion/db.inc.php');
include('clases/class.conexion.php');
include('clases/class.permiso.php');
/**
* Instanciamos la clase de permisos
*/
$obj_permiso = new Permiso();
/**
* Le pasamos el id del usuario y el recuros a validar
*/
$permiso = $obj_permiso->validarPermiso(1,1);
/**
* Validamos si el usuario puede crear una noticia
*/
if( $permiso->agregar == 1){
/**
Ahora con nuestro sistema completo podremos llegar a validar los permiso de cualquier
usuario de acuerdo al conjunto de perfiles que este tenga, espero les sea de utilidad.