Para crear las tablas necesarias para que funcione klear vamos a utilizar Phing. Para ello crearemos un archivo que llamaremos 001-createKlearUsers.sql en el directorio /home/user/workspace/NuevoProyecto/phing/deltas/
El contenido del archivo variará en función de las necesidades de nuestro proyecto:
Si además se quieren configurar roles debemos añadir al archivo 001-createKlearUsers.sql las tablas de Roles de KlearUsers
Atención
Una vez tengamos definido el fichero 001-createKlearUsers.sql, lo ejecutaremos mediante phing:
$ phing migrate
Esta es la tabla sencilla para identificarse:
CREATE TABLE `KlearUsers` (
`userId` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`login` varchar(40) NOT NULL,
`email` varchar(255) NOT NULL,
`pass` varchar(80) NOT NULL COMMENT '[password]',
`active` tinyint(1) DEFAULT '1',
`createdOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`userId`),
UNIQUE KEY `login` (`login`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
insert into KlearUsers (login, pass, active) values ('admin','$2a$08$0hHHBX8So9JhU0a0SNnRCeAZcMEdAfn7T/pl/u/pESzBwztldhRnO', 1);
Atención
Agrega los campos countriId y timezoneId para determinar la procedencia de cada usuario a la hora de identificarse.
CREATE TABLE `Countries` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT '[ml]',
`code` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
CREATE TABLE `Timezones` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`tz` varchar(255) DEFAULT NULL,
`comment` varchar(150) DEFAULT '',
`countryId` mediumint(8) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tz` (`tz`),
KEY `countryId` (`countryId`),
CONSTRAINT `Timezones_ibfk_1` FOREIGN KEY (`countryId`) REFERENCES `Countries` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=419 DEFAULT CHARSET=utf8 COMMENT='[entity]';
CREATE TABLE `KlearUsers` (
`userId` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`login` varchar(40) NOT NULL,
`email` varchar(255) NOT NULL,
`pass` varchar(80) NOT NULL COMMENT '[password]',
`active` tinyint(1) DEFAULT '1',
`createdOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`countryId` mediumint(8) unsigned DEFAULT NULL,
`timezoneId` mediumint(8) unsigned DEFAULT NULL,
PRIMARY KEY (`userId`),
UNIQUE KEY `login` (`login`),
UNIQUE KEY `email` (`email`),
KEY `timezoneId` (`timezoneId`),
KEY `countryId` (`countryId`),
CONSTRAINT `KlearUsers_ibfk_2` FOREIGN KEY (`countryId`) REFERENCES `Countries` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `KlearUsers_ibfk_1` FOREIGN KEY (`timezoneId`) REFERENCES `Timezones` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='[entity]';
insert into KlearUsers (login, pass, active) values ('admin','$2a$08$0hHHBX8So9JhU0a0SNnRCeAZcMEdAfn7T/pl/u/pESzBwztldhRnO', 1);
Atención
Para crear las tablas correspondientes para relacionar los usuarios a Roles, este es el código mysql.
-- Estructura de tabla para la tabla `KlearRoles`
CREATE TABLE IF NOT EXISTS `KlearRoles` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL DEFAULT '',
`identifier` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `identifier` (`identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `KlearRolesSections`
CREATE TABLE IF NOT EXISTS `KlearRolesSections` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`klearRoleId` mediumint(8) unsigned NOT NULL,
`klearSectionId` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `klearRoleId` (`klearRoleId`),
KEY `klearSectionId` (`klearSectionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `KlearSections`
CREATE TABLE IF NOT EXISTS `KlearSections` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL DEFAULT '',
`identifier` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `identifier` (`identifier`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `KlearUsersRoles`
CREATE TABLE IF NOT EXISTS `KlearUsersRoles` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`klearUserId` mediumint(8) unsigned NOT NULL,
`klearRoleId` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `klearUserId` (`klearUserId`),
KEY `klearRoleId` (`klearRoleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='[entity]';
-- Restricciones para tablas volcadas
-- Filtros para la tabla `KlearRolesSections`
ALTER TABLE `KlearRolesSections`
ADD CONSTRAINT `KlearRolesSections_ibfk_1` FOREIGN KEY (`klearRoleId`) REFERENCES `KlearRoles` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `KlearRolesSections_ibfk_2` FOREIGN KEY (`klearSectionId`) REFERENCES `KlearSections` (`id`) ON DELETE CASCADE;
-- Filtros para la tabla `KlearUsersRoles`
ALTER TABLE `KlearUsersRoles`
ADD CONSTRAINT `KlearUsersRoles_ibfk_1` FOREIGN KEY (`klearUserId`) REFERENCES `KlearUsers` (`userId`) ON DELETE CASCADE,
ADD CONSTRAINT `KlearUsersRoles_ibfk_2` FOREIGN KEY (`klearRoleId`) REFERENCES `KlearRoles` (`id`) ON DELETE CASCADE;
-- El siguiente código añadirá los permisos de administrador a tu usuario (con la ID = “1”) que previamente has creado.
INSERT INTO `KlearRoles` (`id`, `name`, `description`, `identifier`) VALUES
(1, 'Administrador', 'Usuario con permisos de administrador', 'admin'),
(2, 'Usuario', 'Con roles para un usuario normal con restricciones.', 'user');
INSERT INTO `KlearUsersRoles` (`id`, `klearUserId`, `klearRoleId`) VALUES
(1, 1, 1);