Como funciona o Authority Check?

Problema

Criar um programa para gerar um relatório de vôos, filtrando por empresa aérea. Os vendedores só podem visualizar determinadas empresas aéreas e somente gerentes podem visualizar todas as empresas.

Solução

Cria um Authorization Object Z_CARRID, como o campo CARRID e ACTVT. Também precisamos criar as seguintes Authorizations: DISPLAY_ALL e DISPLAY_AA.

No programa, devemos verificar se o usuário tem autorização para visualizar a empresa aérea que ele escolheu na tela de seleção:

AUTHORITY-CHECK 'Z_CARRID'
ID CARRID FIELD pa_car
ID ACTVT FIELD '03'.

Se o SY-SUBRC = 0, quer dizer que o usuário possui autorização para visualizar a empresa aérea que ele entrou na tela de seleção. Nesse caso, o programa continua a sua execução.

Caso contrário, o usuário não tem autorização para visualizar a empresa aérea e ai devemos mostrar uma mensagem de erro.

Execução e Teste

Crie um usuário com a autorização DISPLAY_AA e rode o programa. O relatório deve ser mostrado. Retire essa autorização e rode novamente. Uma mensagem de erro deve aparecer.

Discussão

Não é a intensão aqui mostrar como criar os Authorization Objects e as Authorizations, mas qual o mecanismo do sistema de autorização do SAP.

O mecanismo de autorização adotado pela SAP é baseado em Authorization Objects and Authorizations.O conjunto de Authorizations forma um profile e este é adicionado aos profiles do usuário. Um objeto de autorização é base para a criação de Authorizations:

Vamos pegar o exemplo usado acima, do objeto Z_CARRID. Ele é formado pelo campo CARRID (Empresa aérea) e ACTVT (Atividade). Ou seja, um objeto de autorização é formado apenas por campos, sem nenhum valor. 

Os valores são adicionados nas autorizações. No nosso exemplo, citei duas autorizações: DISPLAY_ALL e DISPLAY_AA, compostas pelos seguintes valores:

DISPLAY_ALL
CARRID = *
ACTVT = "03"

Isso significa que o usuário que tiver essa authorization no seu profile, poderá executar a atividade 03 (display) para qualquer empresa aérea (CARRID = *).

DISPLAY_AA
CARRID = "AA"
ACTVT = "02"

 Já essa autorização, garante ao usuário que a tiver em seu profile, a permissão para alterar (atividade 02) empresas aéreas com código “AA”.

Ainda não está terminado. A criação do objeto, da autorização e a inclusão dos mesmos no profile do usuário não garante as devidas permissões. É necessário incluí-lo no programa.

Fazemos isso com o comando:

AUTHORITY-CHECK 'Z_CARRID'    " define o objeto de autorização
ID CARRID FIELD pa_car                " define o valor do campo CARRID para teste
ID ACTVT FIELD '03'.                     " define qual a operação desejada nesse ponto do programa

Com o retorno desse comando será via SY-SUBRC, sendo que 0 significa que o usuário tem autorização, e 8 para permissão negada.

Se quizermos testar se usuário tem ou não permissão para alterar, mudamos a atividade para 02.

Temos várias atividades permitidas. Para consultar a lista completa, veja o help do ABAP da SAP.

Veja Também

Authorizations

1 Resultado