Introdução
O ABAP RESTful Application Programming Model (RAP) é uma poderosa abordagem da SAP para desenvolver aplicações Fiori e serviços OData com base em tecnologia moderna. Um dos aspectos essenciais para garantir a segurança e conformidade das aplicações é a implementação de autorizações, que no RAP pode ser realizada em dois níveis principais: Global e Instance Authorizations.
Código:
authorization master ( global, instance )![]()
Autorizações Globais (Global Authorizations)
As autorizações globais são verificadas no nível da aplicação e geralmente determinam se um usuário tem permissão para acessar o serviço como um todo.
Elas funcionam como um controle de acesso inicial e podem ser configuradas para validar se o usuário possui as credenciais necessárias antes mesmo de permitir qualquer operação no sistema.
Método:
METHODS get_global_authorizations FOR GLOBAL AUTHORIZATION IMPORTING REQUEST requested_authorizations FOR document RESULT result.
Exemplo:
DATA(ls_auth) = zcl_auth=>get_auth_user( ).
IF ls_auth IS NOT INITIAL.
result-%create = if_abap_behv=>auth-allowed.
result-%update = if_abap_behv=>auth-allowed.
result-%delete = if_abap_behv=>auth-allowed.
result-%action-executefile = if_abap_behv=>auth-allowed.
ELSE.
result-%create = if_abap_behv=>auth-unauthorized.
result-%update = if_abap_behv=>auth-unauthorized.
result-%delete = if_abap_behv=>auth-unauthorized.
result-%action-executefile = if_abap_behv=>auth-unauthorized.
ENDIF.Autorizações por Instância (Instance Authorizations)
As autorizações por instância são mais detalhadas e avaliam se um usuário tem permissão para executar uma ação em um registro ou instância específica de um objeto de negócio. Esse tipo de verificação é crucial para garantir que os dados sejam protegidos de forma granular.
Método:
METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION IMPORTING keys REQUEST requested_authorizations FOR document RESULT result.
Exemplo:
READ ENTITIES OF zr_cds IN LOCAL MODE
ENTITY document
ALL FIELDS WITH CORRESPONDING #( keys )
RESULT DATA(lt_result)
FAILED failed.
result = VALUE #( FOR ls_result IN lt_result
( %tky = ls_result-%tky
%update = COND #(
WHEN ls_result-status = 4
THEN if_abap_behv=>fc-o-disabled
ELSE if_abap_behv=>fc-o-enabled )
%action-executefile = COND #(
WHEN ls_result-status = 2 OR
ls_result-status = 3
THEN if_abap_behv=>fc-o-enabled
ELSE if_abap_behv=>fc-o-disabled ) ) ).