Archivo

Posts Tagged ‘authority-check’

SU53 – Obtener del BUFFER errores de autorización

Caso: se solicita obtener los errores de autorización del usuario, tal cual cuando se ejecuta la SU53.

Solución: No encontré una solución perfecta. De lo que pude investigar fue “simular” la SU53, obteniendo desde el BUFFER del usuario los resultados.

La SU53, al ser ejecutada, graba el último error de autorización en la tabla USR07. Pero sólo guarda el último, por lo cual una opción sería ejecutar un JOB (creándolo desde el mismo usuario) para obtener el buffer y así ir guardando cada X tiempo los errores de autorización leyéndolos desde el BUFFER, sin tener que ejecutar la SU53.

  1. Les paso esta nota que aclara un poco el tema: http://solveissue.com/note?id=1974803
  2. El programa en cuestión es el siguiente:
REPORT  zleer_su53.
 
DATA:   BEGIN OF usr07key,
          objct LIKE usr07-objct,
          fiel0 LIKE usr07-fiel0,
          fiel1 LIKE usr07-fiel0,
          fiel2 LIKE usr07-fiel0,
          fiel3 LIKE usr07-fiel0,
          fiel4 LIKE usr07-fiel0,
          fiel5 LIKE usr07-fiel0,
          fiel6 LIKE usr07-fiel0,
          fiel7 LIKE usr07-fiel0,
          fiel8 LIKE usr07-fiel0,
          fiel9 LIKE usr07-fiel0,
        END OF usr07key.
 
DATA:   BEGIN OF usr07val1,
          val01 LIKE usr07-val01,
          val02 LIKE usr07-val01,
          val03 LIKE usr07-val01,
          val04 LIKE usr07-val01,
          val05 LIKE usr07-val01,
          val06 LIKE usr07-val01,
        END OF usr07val1.
 
DATA:   BEGIN OF usr07val2,
          val07 LIKE usr07-val01,
          val08 LIKE usr07-val01,
          val09 LIKE usr07-val01,
          val10 LIKE usr07-val01,
        END OF usr07val2.
 
DATA:   g_buffer_method(10),
        usr07             TYPE usr07.
 
 
CALL 'C_SAPGPARAM'
     ID 'NAME' FIELD 'auth/new_buffering'
     ID 'VALUE' FIELD g_buffer_method.
 
GET PARAMETER ID 'XU1' FIELD usr07key.                      "#EC EXISTS
GET PARAMETER ID 'XU2' FIELD usr07val1.                     "#EC EXISTS
GET PARAMETER ID 'XU7' FIELD usr07val2.                     "#EC EXISTS
 
CLEAR usr07.
usr07-bname = sy-uname.
MOVE-CORRESPONDING usr07key  TO usr07.
MOVE-CORRESPONDING usr07val1 TO usr07.
MOVE-CORRESPONDING usr07val2 TO usr07.
 
MOVE sy-datum TO usr07-cdate.
MOVE sy-uzeit TO usr07-ctime.
 
WRITE / : usr07-bname.
WRITE / : usr07-objct.
WRITE / : usr07-fiel0.
WRITE / : usr07-fiel1.
WRITE / : usr07-VAL01.

3. También encontré una transacción ZSU53 que puede servirles, lo que hace es generar el error de autorización y muestra qué perfiles necesita el usuario para cumplir con dicha autorización:

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/202d833a-79ae-2c10-e4a7-d51218a7efb4?QuickLink=index&overridelayout=true&45629732722609

https://code.google.com/p/zsu53/

4. También encontré una BAPI que ejecuta en fondo la SU53 para obtener en un texto el resultado: http://searchsap.techtarget.com/tip/BAPI-to-retrieve-Check-Values-like-SU53-result

Anuncios

Saltar mensaje "Falta autorización para transacción"

Caso: Se desea evitar el mensaje "Falta autorización para transacción"

Solución: Si tenemos acceso a la SE37, podemos ejecutar la función RS_HDSYS_CALL_TC_VARIANT.

Allí, en el parámetro TCODE ponemos la transacción a la cual deseamos ingresar y quitamos la X al parámetro AUTHORITY-CHECK.

Debe usarse con cuidado porque queda en el LOG de accesos y en la transacción (ejemplo en la SU01) puede que no tengas otros accesos

Como crear un objeto de autorización

Vamos a ver como hacer un objeto de autorización simple.

Supongamos que queremos verificar que el usuario tiene autorización para acceder a trabajar sobre la sociedad AR01.

Hay distintos tipos de autorización para un objeto; por ejemplo se puede visualizar, modificar, etc. sobre una varable. Vamos a agregar todas las actividades para poder acceder a una sociedad.

Transacciones relacionadas: SU21, SU24, SE38, PFCG.

  1. Primero hay que ir a la transacción SU21 para crear una clase de objeto. Lo creamos y luego de creado hacemos doble click sobre él.

  1. Aparecerá la lista de objetos de la clase. Creamos un nuevo objeto

  1. Presionamos el botón “Actividades permitidas” y elegimos las actividades que corresponden a la autorización. En nuestro caso eligiremos la 01, 02 y 03.

  1. Guardamos los cambios.
  1. Ahora vamos a la transacción SU24 para relacionar nuestro programa Z a la autorización que creamos. Indicamos el nombre de nuestra transacción Z y presionamos ejecutar.

  1. Veremos la lista de transacciones, presionamos en “Ind. Verificación” o hacemos doble click sobre el nombre de la transacción

  1. Entramos a modificar el indicador de verificación. Presionamos “Obj. Autoriz” para agregar nuestro objeto.

  1. Indicamos el objeto recién creado:

  1. Ahora el objeto aparece en la lista. Grabamos.

  1. Nos queda agregar la autorización en el programa Z. En nuestro caso queremos ver que el usuario tenga permiso de visualización de la sociedad que viene por parámetro:

*—————————————————————————-

at selection-screen.

perform check_autorizacion using pa_bukrs.

*—————————————————————————-

form check_autorizacion using p_bukrs type bukrs.

authority-check object ‘ZFI_AR0001’
id ‘BUKRS’ field p_bukrs
id ‘ACTVT’ field ’03’.

if sy-subrc <> 0.
message e001 with p_bukrs. “No tiene autorización para la sociedad &.
endif.
endform.

*——————————————————————————————-

  1. Ahora bien, cuando queramos ejecutar el programa, nos va a dar error ya que nosotros mismos no tenemos autorización para acceder al mismo (salvo que tengamos perfil SAP_ALL). Por lo tanto debemos crearnos un perfil. Vamos a la transacción PFCG, ponemos el nombre de un nuevo rol y ponemos el botón “Nuevo Rol”:

  1. Al crear el nuevo rol, debemos incluir una descripción. La agregamos y vamos a la lengüeta “Autorizaciones” y allí presionamos el botón verde que dice proponer perfil: nos va a crear un nuevo perfil. Presionamos entonces el botón Modificar datos de autorización.

  1. Si nos pide seleccionar modelo, le ponemos que no y si nos dice guardar el rol le ponemos que si. Aparecerá la siguiente pantalla, en donde apretaremos en “Agregar manualmente”:

  1. Indicamos el objeto de autorización y presionamos OK.

  1. Ahora debemos indicar en nuestro perfil que accesos va a tener el mismo sobre el objeto de autorización. Recordemos que el objeto está creado para las actividades 01, 02 y 03.

Pero queremos que este rol tenga solo acceso para la actividad 03. Sería el caso de un perfil de “visualizador”, generalmente la nomenclatura es que se hace un perfil ZSD_VIS_SOCIEDAD por ejemplo para este caso y para las actividades 01 y 02 sería: ZSD_MGT_SOCIEDAD.

Para la sociedad elegimos sólo la AR01.

  1. Vemos que todo el árbol queda en verde. Apretamos el botón de GENERAR y volvemos a la pantalla anterior, en donde tenemos que ir a la lengüeta de usuarios para agregarnos. Agregamos nuestro usuario y presionamos el botón COMPARAR USUARIOS y luego “Ajuste completo” para ajustar los datos y así se actualiza el maestro de usuarios con los cambios. Finalmente presionamos guardar y volvemos a ejecutar el programa Z.
Categorías:BASIS, Otras Etiquetas: , , , , ,