mirror of
https://github.com/sasjs/core.git
synced 2025-12-10 22:14:35 +00:00
95 lines
2.8 KiB
SAS
Executable File
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; |