L’instruction AUTHORITY-CHECK est la commande centrale en ABAP pour effectuer des controles d’autorisation. Avec cette instruction, vous verifiez au moment de l’execution si l’utilisateur actuellement connecte dispose des autorisations necessaires pour executer une action specifique ou acceder a certaines donnees.
Le systeme SAP verifie si les autorisations demandees dans le code du programme (definies par un objet d’autorisation et des valeurs de champs specifiques) correspondent aux autorisations attribuees a l’utilisateur via ses roles dans l’enregistrement principal utilisateur (transaction SU01, maintenance des roles PFCG).
Concept en arriere-plan (Bref)
- Objets d’autorisation (SU21) : Regroupent jusqu’a 10 champs d’autorisation qui definissent ensemble une autorisation specifique (par ex. objet
F_BKPF_BUKpour les pieces comptables par societe, avec les champsBUKRS(societe) etACTVT(activite)). - Champs d’autorisation : Les criteres individuels au sein d’un objet (par ex.
ACTVTpour l’activite comme Afficher ‘03’, Modifier ‘02’, Creer ‘01’). - Autorisations : Expressions concretes dans l’enregistrement principal utilisateur qui definissent les valeurs ou modeles autorises pour les champs d’un objet (par ex. l’utilisateur Muller peut executer l’activite ‘03’ pour la societe ‘1000’ dans l’objet
F_BKPF_BUK). AUTHORITY-CHECK: Compare les valeurs de champs demandees dans le code avec les autorisations stockees dans l’enregistrement principal utilisateur pour l’objet specifie.
Syntaxe
AUTHORITY-CHECK OBJECT '<Objet_autorisation>" ID '<Nom_champ1>' FIELD <Valeur1> ID '<Nom_champ2>' FIELD <Valeur2> ... [ID '<Nom_champX>' DUMMY]. " Optionnel
" Immediatement apres le controle, sy-subrc DOIT etre evalue :IF sy-subrc = 0. " Controle reussi - L'utilisateur a la ou les autorisations. " Executer le code protege...ELSE. " Controle echoue (sy-subrc <> 0) - L'utilisateur n'a PAS l'autorisation. " Afficher un message d'erreur, quitter le traitement, etc.ENDIF.OBJECT '<Objet_autorisation>': (Obligatoire) Le nom de l’objet d’autorisation (depuisSU21) comme literal de caracteres, contre lequel on verifie (par ex.'S_TCODE','F_BKPF_BUK','S_CARRID').ID '<Nom_champ>' FIELD <Valeur>: (Au moins un ajoutID, sauf en cas d’utilisation exclusive deDUMMY) Definit un champ d’autorisation de l’objet (par ex.'TCD','BUKRS','ACTVT') et la valeur (une variable ou un literal) pour laquelle l’autorisation de l’utilisateur doit etre verifiee. Vous devez normalement specifier un ajoutID/FIELDpour tous les champs de l’objet qui sont pertinents pour votre controle.ID '<Nom_champ>' DUMMY: (Optionnel) Au lieu d’une valeur concrete, on verifie ici seulement si l’utilisateur possede une quelconque autorisation pour ce champ dans le contexte de l’objet. Ceci est parfois utilise pour verifier si un objet est present dans le profil utilisateur, ou pour verifier par exemple une activite sans la specifier (bien que le controle avec une valeurACTVTconcrete soit plus courant). Si seuls des champsDUMMYsont verifies, on verifie essentiellement seulement si l’utilisateur a cet objet dans ses profils.
Champ systeme sy-subrc (Le resultat du controle)
Vous devez toujours evaluer le resultat du AUTHORITY-CHECK dans le champ systeme sy-subrc directement apres :
sy-subrc = 0: Succes ! L’utilisateur a l’autorisation demandee.sy-subrc = 4: Pas d’autorisation. L’utilisateur n’a pas l’autorisation correspondante pour la combinaison verifiee.sy-subrc = 12: Aucun profil present. L’utilisateur n’a pas de profil contenant l’objet d’autorisation verifie.sy-subrc = 8: Autorisation incomplete (rare, se produit lorsqu’une autorisation existe pour moins de champs que ceux specifies dans le controle).- Autres valeurs (16, 24, 28, 32, 36) : Indiquent des problemes techniques (tampon utilisateur defectueux, nom de champ incorrect dans le controle, objet non present dans le systeme, etc.).
=> En pratique, vous verifiez generalement sy-subrc = 0 pour le succes et traitez tous les autres cas (sy-subrc <> 0 ou sy-subrc >= 4) comme “autorisation manquante”.
Ou et quand utiliser ?
- Avant d’autoriser l’utilisateur a executer une action critique (modifier, supprimer des donnees, demarrer des programmes speciaux).
- Avant d’afficher des donnees sensibles.
- Lorsque l’acces aux donnees ou fonctions doit etre restreint a certaines unites organisationnelles (societe, usine, centre de couts, etc.).
- Dans les developpements personnalises (programmes/classes Z), pour s’assurer que les utilisateurs ne peuvent faire que ce pour quoi ils sont autorises. Les transactions standard et les BAPIs contiennent souvent deja des controles d’autorisation integres (voir
SU24pour le lien entre T-Codes et objets).
Exemples
1. Verifier l’autorisation pour une transaction
AUTHORITY-CHECK OBJECT 'S_TCODE" ID 'TCD' FIELD 'VA01'. " L'utilisateur peut-il demarrer VA01 ?
IF sy-subrc <> 0. MESSAGE 'Vous n''avez pas l''autorisation pour la transaction VA01.' TYPE 'E'. LEAVE PROGRAM.ENDIF.2. Autorisation pour afficher les donnees financieres d’une societe
DATA lv_company_code TYPE bukrs.lv_company_code = '1000'. " Societe pour laquelle on verifie
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' " Objet pour piece comptable/societe ID 'BUKRS' FIELD lv_company_code " Verifier pour cette societe ID 'ACTVT' FIELD '03'. " Verifier l'activite 'Afficher"
IF sy-subrc <> 0. MESSAGE |Pas d'autorisation d'affichage pour la societe { lv_company_code }.| TYPE 'W'. RETURN. " Quitter la methode/formENDIF.
" ... Code pour afficher les donnees de lv_company_code ...3. Controle avec DUMMY (si l’objet est generalement present)
" Verifier si l'utilisateur a une quelconque autorisation pour les fiches articleAUTHORITY-CHECK OBJECT 'M_MATE_STA" ID 'ACTVT' DUMMY ID 'STATM' DUMMY.
IF sy-subrc = 12. " sy-subrc 12 = Aucun profil trouve pour l'objet WRITE: / 'L''utilisateur n''a generalement aucune autorisation pour les fiches article.'.ENDIF.Remarques importantes / Bonnes pratiques
- Evaluez
sy-subrctoujours immediatement apresAUTHORITY-CHECK. - Implementez une gestion d’erreur claire lorsque
sy-subrc <> 0(par ex. afficher un message d’erreur, abandonner le traitement). - Utilisez des constantes (par ex. via
CONSTANTS) pour les noms des objets et champs d’autorisation afin d’eviter les fautes de frappe et d’ameliorer la maintenabilite. - Concertez-vous avec la gestion des autorisations de votre entreprise sur les objets d’autorisation et les valeurs de champs pertinents pour votre application a verifier.
- Verifiez tous les champs pertinents d’un objet necessaires pour la securite de l’action (souvent
ACTVTen fait partie).