Crear y Gestionar la Lista de Control de Acceso (ACL)

Es muy común en cualquier tipo de aplicación que necesitemos controlar el nivel de acceso de los usuarios a ciertas páginas o componentes de la aplicación dependiendo el privilegio otorgado a un usuario dado, es por ello por lo que vamos a crear una Página de Control de Acceso.

Para este ejemplo vamos a tener tres niveles diferentes de usuarios, por ejemplo, usuarios que solo pueden ver la información, usuarios que pueden ver y además editar la información de la aplicación y por último el usuario de tipo administrador.

Gestionar Control de Acceso

Crear Página de Control de Acceso

Al agregar la función de control de acceso a una aplicación, se crean varias páginas y los siguientes componentes:

  • Una región de control de acceso
  • Roles de acceso
  • Esquemas de autorización
  • Una opción de compilación à Feature: Access Control
  • Una configuración de aplicación à ACCESS_CONTROL_SCOPE

Los desarrolladores utilizan la lista de control de acceso para asociar los privilegios, vieweditadministration, con los usuarios de la aplicación. 

Dentro de la interfaz de usuario de control de acceso final, cada privilegio se correlaciona con una función de acceso:

  • View se correlaciona con el Reader rol.
  • Edit se correlaciona con el Contributor rol.
  • Administration se correlaciona con el Administrator rol.

Cuando usted agrega la función de control de acceso a una aplicación, el asistente de PL/SQL crea los siguientes esquemas de autorización:

Administration Rights – Este esquema de autorización verifica si el usuario actual en la aplicación tiene asignado el rol de ADMINISTRATOR.

return APEX_ACL.HAS_USER_ROLE (p_application_id=>:APP_ID, p_user_name => :APP_USER, p_role_static_id => 'ADMINISTRATOR');

Contribution Rights – Este esquema de autorización verifica si al usuario actual en la aplicación se le asigna el rol de ADMINISTRATOR o el rol de CONTRIBUTOR.

if apex_acl.has_user_role (
  p_application_id=>:APP_ID,
  p_user_name => :APP_USER,
  p_role_static_id => 'ADMINISTRATOR') or
  apex_acl.has_user_role (
    p_application_id=>:APP_ID,
    p_user_name=> :APP_USER,
    p_role_static_id=> 'CONTRIBUTOR') then
    return true;
else
    return false;
end if;

Reader Rights – Este esquema de autorización devuelve VERDADERO si el control de acceso está configurado para permitir que cualquier usuario autenticado acceda a la aplicación. Si este comportamiento no está permitido, comprueba si el usuario actual de la aplicación está asignado a algún rol de la aplicación.

if nvl(apex_app_setting.get_value(
   p_name => 'ACCESS_CONTROL_SCOPE'),'x') = 'ALL_USERS' then
    -- allow user not in the ACL to access the application
    return true;
else
    -- require user to have at least one role
    return apex_acl.has_user_any_roles (
        p_application_id => :APP_ID,
        p_user_name      => :APP_USER);
end if;

Lo primero que vamos a realizar es la creación de una página de control de acceso mediante la ejecución del Asistente para páginas de control de acceso.

Desde la página de inicio de Oracle APEX, ingresamos a nuestra aplicación, en mi caso: Demostration – Projects.

Desde la página de inicio de la aplicación, haga clic en el botón Create Page.

Seleccione el tab Feature, y luego seleccione Access Control.

En la ventana Create Access Control Pages:

  • Administration Page Reference: Identify an existing page

  • Existing Administration Page: 10000

Nota: en mi caso ya tenia una página de administración creada, en caso de que tú no la tengas creas una nueva.

Haga clic en el botón Next.

Verifique la ventana de Confirmation. Luego haga clic en el botón Create.

Ejecutar Página de Control de Acceso

Ejecutamos la página 10000 y podemos ver que se ha agregado una región de Access Control.

Dentro de esta región hay una lista que contiene la lista de Usuarios y la habilitación o no del Control de Acceso.

Haga clic en el botón Add User.

Ingrese en Username: CLARA. Marque el checkbox como Contribuitor, luego haga clic en Add User. Nota: El usuario debe existir como un usuario final en el espacio de trabajo.

Ingrese en Username: JANE. Marque el checkbox como Reader, luego haga clic en Add User. Nota: El usuario debe existir como un usuario final en el espacio de trabajo.

Haga clic en Users para ver los usuarios y sus roles.

Podemos ver que tenemos un usuario administrador, un usuario contribuidor y un usuario lector.

Desactivar Lista de Control de Acceso

Si desea desactivar la Lista de Control de Acceso y que cualquier usuario autenticado en APEX pueda ingresar a la aplicación, haga clic en Access Control. Luego en la pantalla modal haga clic en el botón para habilitar a cualquier usuario que ingrese a la aplicación.

Restringir acceso a usuario de tipo Lector

El usuario JANE no puede crear tareas ni editar tareas, por ello hay que restringir el botón créate y el enlace de edición de tareas a que sólo los usuarios de tipo Contribuidor y Administrador puedan tener acceso.

Desde la página de inicio de la aplicación, haga clic en la página 10 – Demo Tasks.

Haga clic en el botón CREATE.

Desde el panel de propiedades del botón navegue hasta la sección Security. Seleccione: Authorization Scheme: Contribuitor Rights.

Seleccione la región de informe interactivo Demo Tasks.

En la ficha Attributes de la región, y dentro de la sección Link, seleccione: Authorization Scheme: Contribuitor Rights.

Guarde los cambios de la página.

Probar el acceso de usuario CLARA – Con rol de CONTRIBUIDOR

Inicie sesión como el usuario CLARA.

Navegue hasta la página Demo Tasks.

El usuario CLARA puede editar una tarea o crear nueva tarea. Además, tampoco puede ver el menú de Administración.

Cierre sesión usuario CLARA.

Probar el acceso de usuario JANE – Con rol de LECTOR

Inicie sesión como el usuario JANE.

Navegue hasta la página Demo Tasks.

El usuario JANE no puede editar una tarea o no puede crear nueva tarea.

Cierre sesión de la usuaria JANE.

Resumen

En esta práctica hemos podido ver cómo implementar en APEX la Lista de Control de Acceso. Cabe destacar que es un trabajo muy puntual y de detalle ya que se debe determinar el nivel de acceso para los usuarios de sólo visualización, de edición de datos y el de nivel administración para toda la aplicación.

En este ejemplo hemos visto cómo implementarlo en una sola página con un informe interactivo, pero está demás decir que para cada parte de nuestra aplicación debemos indicar el nivel de acceso de los usuarios si tenemos implementado la lista de control de acceso.

Publicado por Ing. Clarisa Maman Orfali

Clarisa es Oracle ACE Director, con más de 27 años de experiencia como desarrolladora, docente, autora y consultora en Tecnologías de la Información. Clarisa es de Argentina que vive y trabaja en Irvine, California, en los Estados Unidos. Ella es autora de los primeros tres libros de Oracle APEX. También es co-fundadora del Grupo de Usuarios de Oracle de Argentina (AROUG) y se ha especializado los últimos 13 años en el desarrollo de aplicaciones web con Oracle Application Express (APEX).

Deja un comentario

Descubre más desde Kiú

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo