Publié le :

Ajout d'un utilisateur à un groupe de métadonnées

Attention : Ce code nécessite des droits administrateur.
La macro `%mm_adduser2group` ajoute un utilisateur (Person) à un groupe de métadonnées (IdentityGroup) dans l'environnement SAS©. Le processus commence par une série de vérifications utilisant la fonction `metadata_getnobj` dans un data step pour s'assurer que l'utilisateur et le groupe existent bien, et que l'utilisateur n'est pas déjà membre du groupe. Si ces vérifications sont concluantes, la macro utilise `PROC METADATA` avec une requête XML pour effectuer l'association. Des mécanismes de contrôle et un paramètre de débogage (`mdebug`) sont inclus pour gérer les erreurs et faciliter la maintenance.
Analyse des données

Type : EXTERNE


Le script interroge et modifie le serveur de métadonnées SAS. Les objets manipulés (Person, IdentityGroup) sont des entités de métadonnées et non des tables de données SAS traditionnelles. Les données proviennent donc d'une source externe au code lui-même.

1 Bloc de code
MACRO
Explication :
Définition de la macro `%mm_adduser2group` et premier bloc de validation. Ce data step utilise `metadata_getnobj` pour interroger le serveur de métadonnées afin de : 1. Confirmer l'existence de l'utilisateur et récupérer son identifiant unique (URI). 2. Confirmer l'existence du groupe et récupérer son URI. 3. Vérifier si l'utilisateur est déjà un membre direct du groupe. En cas d'échec d'une de ces étapes, un message d'erreur est enregistré et une variable macro 'check' est positionnée pour empêcher la suite de l'exécution.
Copié !
1%macro mm_adduser2group(user=
2 ,group=
3 ,mdebug=0
4);
5/* first, check if user is in group already exists */
6%local check uuri guri;
7%let check=ok;
8 
9DATA _null_;
10 LENGTH uri type msg $256;
11 call missing(of _all_);
12 rc=metadata_getnobj("omsobj:Person? @Name='&user'",1,uri);
13 IF rc<=0 THEN DO;
14 msg="%str(WARN)ING: rc="!!cats(rc)!!" &user not found "!!
15 ", or there was an err reading the repository.";
16 call symputx('check',msg);
17 putlog msg;
18 stop;
19 END;
20 call symputx('uuri',scan(uri,2,'\'));
21 
22 rc=metadata_getnobj("omsobj:IdentityGroup? @Name='&group'",1,uri);
23 if rc<=0 then do;
24 msg="%str(WARN)ING: rc="!!cats(rc)!!" &group not found "!!
25 ", or there was an err reading the repository.";
26 call symputx('check',msg);
27 putlog msg;
28 stop;
29 end;
30 call symputx('guri',scan(uri,2,'\'));
31 
32 rc=metadata_getnobj("omsobj:Person?Person[ @Name='&user'][IdentityGroups/*[ @Name='&group']]",1,uri);
33 if rc=0 then do;
34 msg="%str(WARN)ING: rc="!!cats(rc)!!" &user already in &group";
35 call symputx('check',msg);
36 stop;
37 END;
38 
39 IF &mdebug ne 0 THEN put (_all_)(=);
40RUN;
2 Bloc de code
PROC METADATA
Explication :
Second bloc de la macro qui exécute la mise à jour. Après avoir vérifié que la variable 'check' est 'ok' et que le code retour système `&syscc` n'indique pas d'erreur, `PROC METADATA` est appelée. La requête de mise à jour est fournie sous forme de chaîne XML via le paramètre `IN=`. Cette requête utilise les URIs de l'utilisateur (`&uuri`) et du groupe (`&guri`) précédemment récupérés pour créer l'association. Un bloc de débogage conditionnel permet d'afficher la réponse du serveur. Enfin, le fileref temporaire est nettoyé.
Copié !
1/* stop if issues */
2%IF %quote(&check) ne %quote(ok) %THEN %DO;
3 %put ✓
4 %return;
5%END;
6 
7%IF &syscc ge 4 %THEN %DO;
8 %put %str(WARN)ING: SYSCC=&syscc, exiting &sysmacroname;
9 %return;
10%END;
11 
12 
13filename __us2grp temp;
14 
15PROC METADATA in= "<UpdateMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata>
16 <Person Id='%nrstr(&uuri)'>
17 <IdentityGroups><IdentityGroup ObjRef='%nrstr(&guri)' />
18 </IdentityGroups></Person></Metadata>
19 <NS>SAS</NS><Flags>268435456</Flags></UpdateMetadata>"
20 out=__us2grp verbose;
21RUN;
22 
23%IF &mdebug ne 0 %THEN %DO;
24 /* write the response to the log for debugging */
25 DATA _null_;
26 INFILE __us2grp lrecl=32767;
27 INPUT;
28 put _infile_;
29 RUN;
30%END;
31 
32filename __us2grp clear;
33 
34%mend mm_adduser2group;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. L'information a été trouvée dans le fichier 'macro_with_brief_tag.sas' référencé dans les commentaires d'en-tête.


Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« La gestion manuelle des utilisateurs via la console SAS Management Console est chronophage et sujette aux erreurs, surtout dans les environnements multi-plateformes. La macro %mm_adduser2group est un excellent exemple d'industrialisation des habilitations.

Sa force réside dans ses vérifications pré-exécution : en testant l'existence des objets Person et IdentityGroup avant d'émettre la requête XML, elle garantit l'intégrité du serveur de métadonnées. L'utilisation du moteur de recherche omsobj avec des filtres complexes permet de s'assurer que l'utilisateur n'est pas déjà membre du groupe, évitant ainsi des mises à jour redondantes ou des instabilités du référentiel d'identité »