My QAuthentication

thread: 2 messages  |  last: about 4 years ago  |  started: friday, may 29, 2015, 8:52 pm pdt


#1  |  XolYnrac Peru
Friday, May 29, 2015, 8:52 PM PDT

I am working on a plugin that allows easy way to secure the scripts based qcubed.
This plugin implements the classes QAuthenticationAccess, QAuthenticationModule and QAuthenticationPerfil.

The first 2 classes are supported for persitencia in XML documents; the QAuthenticationGen.xml and AuntenticacionCustom.xml.
The first is that the CodeGen generates the second is where the programmer can customize.

The third class are supported in QAuthentication.xml

The plugin works on two levels: Codegen and Form.

In CodeGen
---------------
For each form draft created, the plugin creates a related “module” in QAuthenticationGen.xml, also create 4 “access”s to [class_name]_edit form (access to Create, to Read, to Update and to Delete) and 1 access to [class_name]_list form (List).

Also when codegen create the forms [class_name]_edit add code (I have put that commented) that set the “Display” property on false or true for the Save and Delete buttons depending whether or not the user has access to Create (c) Modify (or ) or delete (d)

Also I add a line of code in the Form_Run() which verifies that if user can “access” to current “module”

In the forms [class_name]_list also add a line of code in the Form_Run() which verifies that the user can access the module that owns the current script. Also the edit column of datagrid.
In the template list also adds code to check whether the user has permission to create or not objects of that type.

In Form
------------
This plugin assumes that a user has utenticated and was added to the class authentication through QAuthentication::setUsuario($objUsuario)

It necesary that $objUsuario object has the variable member “Id” which use the QAuthentication class in the session variable $_SESSION

   public static function setUsuario ($objUsuario)
   (
   $_SESSION [ 'USUARIO'] [ 'id'] = $objUsuario-> Id;
   )

When we want to add security to a script we should add a line of code in Form_Run () something like:
   QAuthentication::verifyAccessibility('alumno_list');

In the above example I give security to the script. Authentication verifies if the authenticated user has privileges (access) to view the page

when you wish to obtain the url of a module for use in such a QApplication::Redirect() we use QAuthentication::getURL( 'edicion_list')

QApplication:: Redirect (Authentication:: getURL ( 'edicion_list'))

this way if we change the  path of a script file that belongs to the module edicion_list, we have not to modify all the scripts that referenced it.


Other Tools
===========
I added 2 subdirectories in QAuthentication, configuration and administration. The first is to customize the modules and access. The second is to
CRUD profiles, and add users and access to the profiles (in draft status).

Things to Do
===============
This plugin is a rewrite of something that already come in its second version using for some time .. previous versions include a menu generator ..
where the generation of the menu items also depend on access to the user in the system.

Currently is drafts

I do not complete the form for the administration ... Profiles and Users.

************************************************************************************
************************************************************************************
Yo estoy trabajando en un plugin que permite poner seguridad de forma facil a los scripts basados en qcubed.
Este plugin implementa las clases QAuthenticationAccess, QAuthenticationModule y QAuthenticationPerfil.
Las 2 primera clases tienen soporte para la persitencia en documentos XML. Los files .xml son QAuthenticationGen.xml y AuntenticacionCustom.xml.
El primero es el que se genera con el codegen, el segundo es donde el programador puede personalizar.

La tercera clase esta soportadas en QAuthentication.xml

El plugin trabaja a dos niveles:Codegen y Form.

En el Codegen
---------------
Cuando se ejecuta el codegen, al crear cada formulario draft el plugin crea un “module” en el QAuthenticationGen.xml. Tambien crea 4 “access”s para los formularios [class_name]_edit (access to Create, to Read, to Update and to Delete) y 1 access para el formulario [class_name]_list (List).

Ademas cuando crea los formularios [class_name]_edit añade codigo (lo he puesto comentado) que pone la propiedad Display en false/true para los botones Delete y Save dependiendo si el usuario tiene o no los accesses para Crear(c), Modificar(u) o eliminar(d)

Ademas tambien agregar un linea de codigo en el Form_Run() que verifica si el usuario tiene “access” al “module” actual.

En los formularios [class_name]_list tambien agregar un linea de codigo en el Form_Run() que verifica si el usuario tiene access al module que pertenece el script actual. Tambien el la columna edit del datagrid.
En el template de los list tambien agrega codigo para verificar si el usuario tiene permiso para crear o no objetos de ese tipo.

En los Form
------------
este plugin asume que un usuario se ha utenticado y se lo al agregado a la clase QAuthentication a traves de QAuthentication::setUsuario($objUsuario)

Es neceario que el $objUsuario tenga la variable miembro Id que es lo que la clase QAuthentication pone en la la variable de session $_SESSION

   public static function setUsuario($objUsuario)
   {
   $_SESSION['USUARIO']['id'] = $objUsuario->Id;
   }

Cuando queremos agregar seguridad a un script debemos agregar una linea de codigo en Form_Run() algo como:
   QAuthentication::verifyAccessibility(“edicion_list”);

En el ejemplo anterior le doy seguridad al script. QAuthentication verifica si el usuario autenticado tiene privilegios (access) para ver la pagina

Cuando deseo obtener la url de un module para usarlo por ejemplo en un QApplication::Redirect()
se usa QAuthentication::getURL('edicion_list')

QApplication::Redirect(QAuthentication::getURL('edicion_list'))

de esta forma si cambiamos de lugar el script que pertenece al module edicion_list no tenemos que ir a modificar todos los scripts que lo referencien.


Otras herramientas
===========
Añadi 2 subdirectorios en QAuthentication; Configuracion y Administracion. La primera es para personalizar los módulos y el access. El segundo es para
CRUD de los perfiles, y agregar usuarios y accesses a los perfiles (aun no concluidos).

Cosas por Hacer
===============
Este plugin es una reescritura de algo que ya lo vengo usando en su segunda version hace algun tiempo.. las versiones anteriores incluyen un generador de menu.. donde la generacion de los items del menu tambien dependen de los accesses que tenga el usuario en el sistema.
Currently is drafts

Me falta terminar el formulario para la administracion... Perfiles y Usuarios.


INSTALACION
=============

1)Poner la Carpeta QAuthentication en cualquier lugar accesible por www-data (grupo apache2)

2)Copiar forprojects/  dentro de tu proyecto con el nombre que desees
   Ejm
       _DOCROOT_ . _SUBDIRECTORY_ . “/forproject/”

3)Renombrar forproject/*-dist  a  forproject/*
       
4) permiso de escritura a *.xml que estan dentro de _DOCROOT_ . _SUBDIRECTORY_ . “/forproject/”

6)Editar el prepend.inc.php para q incluya al QAuthenticationConfig.inc.php despues de QApplication::Initialize();
   Ejm
       QApplication::Initialize();
       require_once(_DOCROOT_ . _SUBDIRECTORY_.”/forproject/QauthenticationConfig.inc.php”);

7)Editar QAuthenticationConfig.inc.php para incluir la ruta en donde se encuetra el QAuthentication
   Ejm
define('__INCLUDES_QAUTHENTICATION_DIR__',”/home/public_html/carlos/Qauthentication”);

8) Seleccionar el framework correspondiente
   $qFrameWork = _QAUTH_QFRAME_QCUBED_;
   o
   $qFrameWork = _QAUTH_QFRAME_QCODO_;
       
9)Editar QAuthenticationConfig.inc.php para incluir la ruta en donde se encuetra el prepend.inc.php

   Ejm
       define('__QCODO_PREPEND_FILE__', dirname(_FILE_). “/../../includes/prepend.inc.php”);
       
10) Editar el _QCODO_CORE_ . '/codegen/library.inc.php' y comentar la inclusion de
      //      require_once(_QCODO_CORE_ . '/codegen/QDatabaseCodeGen.class.php');
       
11) agregar los templates personalizados

12) Eliminar scripts DRAFTS

13) Copiar login.php noaccess.php y noexiste.php en:
   _DOCROOT_ . _SUBDIRECTORY_

14) Crear la tabla usuario con los campos id(autoincremental), nick(UK), clave

15) Ejecutar codegen.php

#2  |  XolYnrac Peru
Friday, May 29, 2015, 8:54 PM PDT

if someone want to try that please send me a message.

Thank!!!



Copyright © 2005 - 2019, Quasidea Development, LLC
This open-source framework for PHP is released under the terms of The MIT License.