1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-10 22:14:35 +00:00
Files
core/meta/mm_getgroups.sas

95 lines
2.8 KiB
SAS
Executable File

/**
@file
@brief Creates dataset with all groups or just those for a particular user
@details Provide a metadata user to get groups for just that user, or leave
blank to return all groups.
Usage:
- all groups: `%mm_getGroups()`
- all groups for a particular user: `%mm_getgroups(user=&sysuserid)`
@param [in] user= the metadata user to return groups for. Leave blank for all
groups.
@param [in] repo= the metadata repository that contains the user/group
information
@param [in] mDebug= set to 1 to show debug messages in the log
@param [out] outds= the dataset to create that contains the list of groups
@returns outds dataset containing all groups in a column named "metagroup"
- groupuri
- groupname
- groupdesc
@version 9.2
@author Allan Bowe
**/
%macro mm_getGroups(
user=
,outds=work.mm_getGroups
,repo=foundation
,mDebug=0
)/*/STORE SOURCE*/;
%local mD oldrepo;
%let oldrepo=%sysfunc(getoption(metarepository));
%if &mDebug=1 %then %let mD=;
%else %let mD=%str(*);
%&mD.put Executing mm_getGroups.sas;
%&mD.put _local_;
/* on some sites, user / group info is in a different metadata repo to the
default */
%if &oldrepo ne &repo %then %do;
options metarepository=&repo;
%end;
%if %length(&user)=0 %then %do;
data &outds (keep=groupuri groupname groupdesc);
length groupuri groupname groupdesc group_or_role $256;
call missing(of _all_);
i+1;
do while
(metadata_getnobj("omsobj:IdentityGroup?@Id contains '.'",i,groupuri)>0);
rc=metadata_getattr(groupuri, "Name", groupname);
rc=metadata_getattr(groupuri, "Desc", groupdesc);
rc=metadata_getattr(groupuri,"PublicType",group_or_role);
if Group_or_Role = 'UserGroup' then output;
i+1;
end;
run;
%end;
%else %do;
data &outds (keep=groupuri groupname groupdesc);
length uri groupuri groupname groupdesc group_or_role $256;
call missing(of _all_);
rc=metadata_getnobj("omsobj:Person?@Name='&user'",1,uri);
if rc<=0 then do;
putlog "%str(WARN)ING: rc=" rc "&user not found "
", or there was an issue reading the repository.";
stop;
end;
a=1;
grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
if grpassn in (-3,-4) then do;
putlog "%str(WARN)ING: No metadata groups found for &user";
output;
end;
else do while (grpassn > 0);
rc=metadata_getattr(groupuri, "Name", groupname);
rc=metadata_getattr(groupuri, "Desc", groupdesc);
a+1;
rc=metadata_getattr(groupuri,"PublicType",group_or_role);
if Group_or_Role = 'UserGroup' then output;
grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
end;
run;
%end;
%if &oldrepo ne &repo %then %do;
options metarepository=&oldrepo;
%end;
%mend mm_getGroups;