Tasks and Roles: Difference between revisions

From IHRIS Wiki
Line 75: Line 75:
donde $form es el resultado de obtener el formulario por el nombre de 'form_name' por medio de los [[Pages and Templates#Template Data|datos de la plantilla]] para el nodo (si hubiese alguno) al que se asignó la cadena de permiso.
donde $form es el resultado de obtener el formulario por el nombre de 'form_name' por medio de los [[Pages and Templates#Template Data|datos de la plantilla]] para el nodo (si hubiese alguno) al que se asignó la cadena de permiso.


==Arguments==
==Argumentos==
A permission type (such as role, task, form or module) in a permission string behaves essentially like a function. Suppose that we have the general shape for a piece of a permission string:
Un tipo de permiso (tal como rol, tarea, formulario o módulo) en una cadena de permiso, se comporta esencialmente como una función. Suponga que tenemos la forma general de una pieza de una cadena de permiso:
  type([arg1],[arg2],...,[argN])
  type([arg1],[arg2],...,[argN])
Then this results in the method call:
Entonces esto resulta en el método llamada:
  $permissionParsrer->hasPermission_$type($node,$args)
  $permissionParsrer->hasPermission_$type($node,$args)
where $node is the DOMNode the permission string was called on and $args is the array($arg1,..$argN).  The permission parser turns [argM] into $argM according to the following rules:
donde $node es el DOMNode en el que se llamó la cadena de permiso y $args es el arreglo $arg1,..$argN).  El analizador de permiso convierte [argM] en $argM de acuerdo a las siguientes reglas:
*if [argM] starts with a $ then it refers to template data and the following rules apply:
*Si [argM] empieza con un $ entonces se refiere a los datos de la plantilla y las siguientes reglas aplican:
**The string has the form $abcd. The value of $argM becomes the template display data with name 'abcd.'
**La cadena tiene el formulario $abcd. El valor de $argM se convierte en la plantilla para mostrar los datos con el nombre 'abcd.'
**The string has the form ${WXYZ}abcd.  The value of $argM becomes the template data with category 'WXYZ' and with name 'abcd.'
**La cadena tiene el formulario ${WXYZ}abcd.  El valor de $argM se convierte en los datos de la plantilla con la categoría 'WXYZ' y con el nombre 'abcd.'
*<NODE> becomes the instance of DOMNode (if any) that the permission string was called on
*<NODE> se convierte en la instancia de DOMNode (si hay) en la que se llamó la cadena de permiso 
*<TEMPLATE> becomes the instance of I2CE_Template (if any) that the permission parser was called on
*<TEMPLATE> se convierte en la instancia de I2CE_Template (si hay) en la que se llamó el analizador de permiso
*<USER> becomes the instance of I2CE_User that is this session
*<USER> se convierte en la instancia de I2CE_User que es esta sesión
*if [argM] starts with a single quote ' then it is a string until the next non-escaped ' is found
*si [argM] empieza con una sola comilla ' entonces es una cadena hasta que la siguiente ' no-escapada se encuentre
*if [argM] starts with a double quote " then is is a string until the next non-escaped " is found. <br/>In addition the following substitution rules apply:
*si [argM] empieza con una doble comilla " entonces es una cadena hasta que la siguiente " no-escapada se encuentre. <br/>Además se aplican las siguientes reglas de sustitución:
**any substring starting with $ and consisting of alpha-numeric characters, - or _ is interpreted as template display data to be substituted<br> For example "my name is $name" becomes "my name is Joe" if the template data named 'name' and with type DISPLAY is "Joe"
**cualquier sub-cadena que empieza con $ y que consiste de caracteres alfanuméricos , - o _ se interpreta como datos mostrados en la plantilla a ser sustituidos <br> Por ejemplo "mi nombre es $name" se convierte en "mi nombre es Joe" si los datos de la plantilla llamada 'name' y con el DISPLAY tipo "Joe"
**any substring starting with {$ is read until an enclosing } is foundThe string between the ${ and } is the name of DISPLAY template data which is then substituted.
**cualquier sub-cadena que empiece con {$ se lee hasta que se encuentre un } .  La cadena entre $ { y } es el nombre del dato de la plantilla de DISPLAY que es entonces sustituido .
**To prevent the above, { and $ may be escaped with a \
**Para prevenir lo anterior, { y $ se pueden escapar con una \
*any other string of alpha-numeric characters (and a few permitted punctuation marks) is interpreted as a string
*cualquier otra cadena de caracteres alfanuméricos (y algunos signos de puntuación permitidos) se interpretan como una cadena


Arguments may be separated by a comma a space or a |.
Los argumentos se pueden separar con una coma, un espacio o un |.


==New Types==
==New Types==

Revision as of 19:32, 28 September 2013

iHRIS utiliza un mecanismo de seguridad basado en Roles y Tareas para limitar el acceso a las diversas partes del sistema. A un usuario se le asigna un rol y un rol es un conjunto de tareas que ese rol puede realizar.

Este artículo describe como se definen los roles y tareas en Datos Magic y utilizados por el sistema iHRIS.

Roles

Un rol es una colección de tareas que pueden asignarse a la cuenta de un usuario.

  • los nombres de los roles se definen como los secundarios de ruta de magic data /I2CE/roles/names
  • un rol $role tiene un display definido en /I2CE/roles/names/$role/display_name
  • los roles pueden heredar tareas de otro al agregarlo como el valor de un nodo secundario de /I2CE/roles/names/$role/trickle_up
    Por ejemplo, en iHRIS Manage en el /I2CE/roles/names/hr_staff tenemos:
    • display_name => HR Staff
    • trickle_up => Array
      • 0 => admin
      • 1 => hr_manager

dice que el rol de hr_staff aparece como 'HR Staff' y que un hr_manager o admin tiene todas las tareas que tiene un hr_staff.

Tareas

Una tarea puede ser tanto una colección de sub-tareas que tiene esta tarea y la descripción de alguna acción cuyo permiso se puede verificar. La información de las tareas se guarda en datos magic bajo /I2CE/tasks/. Para crear una tarea se crea un nodo secundario de tipo escalar de /I2CE/tasks/task_description. El nombre del nodo es el nombre utilizado para referenciar la tarea. El valor del nodo es la descripción de la tarea que se muestra en la página de Manejo de Tareas y Roles. Por ejemplo, el nodo de magic data /I2CE/tasks/task_description puede verse así:

  • custom_report_admin => Permite la administración del Sistema de Informes Personalizados
  • custom_reports_can_access => Permite acceso mínimo al Sistema de Informes Personalizados
  • custom_reports_delete => Permite eliminación de datos acerca de los informes personalizados
  • custom_reports_can_access_relationships => Permite acceso a las Relaciones de Informes Personalizados

Puede definir la sub-tarea de una tarea $task al especificar /I2CE/tasks/task_trickle_down_task. Por ejemplo, el nodo de datos magic /I2CE/tasks/task_trickle_down/custom_reports_admin puede verse así:

  • 0 => custom_reports_can_access
  • 1 => custom_reports_delete_reports

lo que dice que la tarea de 'custom_report_admin' tiene todas las tareas y derechos definidos por 'custom_reports_can_access' y 'custom_reports_delete_reports.'

Las tareas que se asignan a un rol $role son los valores de los secundarios bajo /I2CE/tasks/role_trickle_down/$role

Un usuario con el rol 'admin' tiene todas las tareas.

Usos de las Tareas y Roles

Las tareas y roles se utilizan en varios lugares:

  • La clase principal I2CE_Page revisa los permisos básicos de la página.
  • Varias páginas revisan los roles específicos y las tareas en su método action().
  • Antes de mostrar el HTML la clase I2CE_Template, verifica que todas las tareas, roles y permisos esten satisfechos en cada nodo.

Task and Role Administration

For deployment across many computers, tasks and roles should be set up in an appropriate module configuration file.

For setting tasks and roles dynamically, the module 'tasks-roles' provides the page named 'roles' and the page named 'tasks' that allows creating new roles and tasks as well as defining the permission inheritance.


Permisos y Analizador de Permisos

El analizador de permisos permite expresiones lógicas para combinar varios tipos de persmisos, tales como tarea, roles, en una cadena de permisos.

Podemos asignar tareas, roles y permisos a los nodos DOM al:

  • Establecer el atributo rol.
    Si el valor es X, esto resulta en la cadena de permiso rol(X) que se pasa al analizador de permisos
  • Establecer el atributo task.
    Si el valor es X, esto resulta en la cadena de permiso task(X) que se pasa al analizador de permisos
  • Establecer el atributo permiso.

Si el nodo falla cualquiera de las revisiones rol, tarea o permiso, eliminará el nodo

Tipos de Permiso: tarea y rol

Los tipos de permisos de tarea y roles se forman rodeando el nombre de un rol con role() o el nombre de una tarea con task(). Por ejemplo, se puede crear la siguiente cadena de permiso:

(task(can_edit_database_list_facility_type) & task(can_edit_database_list_fav_color) || role(admin)

Por defecto, las tareas y roles son 'OR'ed juntos así que los siguientes son todos iguales:

  • task(can_edit_database_list_facility_type) or task(can_edit_database_list_fav_color)
  • task(can_edit_database_list_facility_type) | task(can_edit_database_list_fav_color)
  • task(can_edit_database_list_facility_type) task(can_edit_database_list_fav_color)
  • task(can_edit_database_list_facility_type,can_edit_database_list_fav_color)
  • task(can_edit_database_list_facility_type can_edit_database_list_fav_color)
  • task(can_edit_database_list_facility_type|can_edit_database_list_fav_color)

Tipo de Permiso: módulo

Cualquier función pública de una clase de módulo puede llamarse utilizando el analizador de permisos. Por ejemplo, suponga que el modulo 'my_module' tiene un método 'my_method()' entonces podemos utilizar como la cadena de permiso con argumentos:

module('my_module','my_method', [arg1], ... , [argN])

lo que resultaría en el llamado:

$module->my_method($arg1,..,$argN)

donde $module es la instancia de la clase del módulo para el módulo 'my_module.'

Tipo de Permiso: formulario

El módulo 'forms' incluye el tipo de formulario. La cadena de permiso con argumentos:

form('form_name', 'form_method', [arg1] , .., [argN])

resulta en el llamado:

$form->form_method($arg1,..,$argN)

donde $form es el resultado de obtener el formulario por el nombre de 'form_name' por medio de los datos de la plantilla para el nodo (si hubiese alguno) al que se asignó la cadena de permiso.

Argumentos

Un tipo de permiso (tal como rol, tarea, formulario o módulo) en una cadena de permiso, se comporta esencialmente como una función. Suponga que tenemos la forma general de una pieza de una cadena de permiso:

type([arg1],[arg2],...,[argN])

Entonces esto resulta en el método llamada:

$permissionParsrer->hasPermission_$type($node,$args)

donde $node es el DOMNode en el que se llamó la cadena de permiso y $args es el arreglo $arg1,..$argN). El analizador de permiso convierte [argM] en $argM de acuerdo a las siguientes reglas:

  • Si [argM] empieza con un $ entonces se refiere a los datos de la plantilla y las siguientes reglas aplican:
    • La cadena tiene el formulario $abcd. El valor de $argM se convierte en la plantilla para mostrar los datos con el nombre 'abcd.'
    • La cadena tiene el formulario ${WXYZ}abcd. El valor de $argM se convierte en los datos de la plantilla con la categoría 'WXYZ' y con el nombre 'abcd.'
  • <NODE> se convierte en la instancia de DOMNode (si hay) en la que se llamó la cadena de permiso
  • <TEMPLATE> se convierte en la instancia de I2CE_Template (si hay) en la que se llamó el analizador de permiso
  • <USER> se convierte en la instancia de I2CE_User que es esta sesión
  • si [argM] empieza con una sola comilla ' entonces es una cadena hasta que la siguiente ' no-escapada se encuentre
  • si [argM] empieza con una doble comilla " entonces es una cadena hasta que la siguiente " no-escapada se encuentre.
    Además se aplican las siguientes reglas de sustitución:
    • cualquier sub-cadena que empieza con $ y que consiste de caracteres alfanuméricos , - o _ se interpreta como datos mostrados en la plantilla a ser sustituidos
      Por ejemplo "mi nombre es $name" se convierte en "mi nombre es Joe" si los datos de la plantilla llamada 'name' y con el DISPLAY tipo "Joe"
    • cualquier sub-cadena que empiece con {$ se lee hasta que se encuentre un } . La cadena entre $ { y } es el nombre del dato de la plantilla de DISPLAY que es entonces sustituido .
    • Para prevenir lo anterior, { y $ se pueden escapar con una \
  • cualquier otra cadena de caracteres alfanuméricos (y algunos signos de puntuación permitidos) se interpretan como una cadena

Los argumentos se pueden separar con una coma, un espacio o un |.

New Types

A module can add in a fuzzy method of the form hasPermision_$type to the I2CE_PermissionParser class to enable a new permission type. For example the 'forms' module does this by adding in a new permission type 'form.'