4.1 Seguridad
Introducción
Open Populi Application Framework consta de una estructura propia en cuanto a seguridad y control de acceso, que se integra directamente en todas las aplicaciones desarrolladas bajo la plataforma. Una vez instalado Open Populi Application Framework (ver:
Instalación) , encontraremos que la plataforma modelo contiene una aplicación llamada security. Dicha aplicación provee lo necesario para la validación de los usuarios que desean acceder a las aplicaciones de una plataforma, cuyas acciones así lo requieran. Está planificado para la siguiente versión extender las funcionalidades y módulos de la aplicación Security de manera que se pueda gestionar íntegramente todo lo que se refiere a la administración de usuarios, perfiles y permisos de accesos, ademas de aplicaciones, módulos y acciones que forman parte de una plataforma.
Estructura
La estructura de seguridad y control de acceso es gestionada por la clase OP_Acl. Esta clase se encarga de revisar cuestiones tales como si una aplicación, módulo o acción existen, o sea determina si el usuario está accediendo a una URL valida. Y además brinda la información necesaria para armar un menú con todas las acciones disponibles a un usuario en particular.
La aplicación de seguridad de Open Populi Application Framework trabaja con la siguiente estructura:
- Diagama Entidad Relación de la estructura de seguridad:
- applications
- Modela las aplicaciones que forman parte de la plataforma.
- modules
- Modela los modulos, relacionados con la aplicación a la que pertenecen, que forman parte de la plataforma.
- actions
- Modela las acciones, relacionadas con el modulo al que pertenecen, que forman parte de la plataforma.
- users
- Modela los usuarios que forman parte de la plataforma
- profiles
- Modela los diferentes perfiles de usuarios para acceder a aplicaciones de una plataforma.
- actions_profiles
- Modela las acciones que pertenecen a un determinado perfil de usuario.
- users_actions
- Modela las acciones que pertenecen a un determinado usuario. Aquí es donde a un usuario se le puede otorgar acceso a una acción a la que el perfil no tiene permiso de acceso o bien quitar tal permiso a la que el perfil tiene acceso.
Menú de Acceso de una Plataforma
Como hemos comentado en la sección anterior, la aplicación de Security es gestionada por la clase OP_Acl. Está clase provee un método que determina las acciones a las cuales puede acceder un usuario autenticado en la plataforma. Esto se realiza de la siguiente manera:
class accessComponents extends OP_Components{
public function menu(){
$menu = OP_Context::getInstance()->getAcl()->getAvailables();
$this->data = array('menu'=>$menu);
}
}
El método getAvailables() retorna el array estructurado de la siguiente manera:
- Ejemplo array que retorna getAvailables
array(
'info' => array(
'blog' => array(
'index',
'add',
'edit'
'delete'),
'new' => array(
'index',
'add',
'edit',
'delete)
),
'backend' => array(
'customer' => array(
'index',
'add',
'edit'
'delete')
)
)
Luego, se deberá crear un plantilla de vista para el componente, para lo cual utilizaremos la convención para nombrar a partials, es decir _miComponente.tpl.php y se incluirá en el directorio templates del modulo donde este creado la clase compononents.class.php correspondiente. Bien, entonces, para el caso del componente menú lo llamaremos _menu.tpl.php.
Para que todo funcione correctamente se deberá incluir el menú en el layout de la plataforma correspondiente, de la siguiente manera:
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<title><?php echo includeTitle($op_response) ?></title>
<?php echo includeCss($op_response) ?>
<?php echo includeJs($op_response) ?>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<div id="header">
<img id="logo" src="/miPlataforma/templates/img/logo300x60.gif" alt="Logotipo de Open Populi" />
<div class="clear-both"></div>
</div>
'''<div id="menu">
<?php if($op_context->getUser()->isAuthenticated()):?>
<?php includeSlotComponent('menu', $op_view) ?>
<?php endif; ?>
</div>'''
<?php if($op_context->getSession()->isset_flash('error')): ?>
<div class="plataforma">
<div id="message" class="aviso-rojo"><?php echo $op_context->getSession()->flash('error') ?></div>
</div>
<?php elseif($op_context->getSession()->isset_flash('notice')): ?>
<? //El mensaje desaparecera pasado 3 segundos ?>
<?= onReadyBind("$('#message').fadeIn('slow').animate({opacity: 1.0}, 3000).fadeOut('slow', function() { $(this).remove();});"); ?>
<div id="message" class="plataforma">
<div class="aviso-verde"><?php echo $op_context->getSession()->flash('notice') ?></div>
</div>
<?php endif; ?>
<?php echo $op_content ?>
</body>
</html>
«««
Herramientas y Funcionalidades |
Logs y Auditoría »»»