Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mm_getauthinfo.sas
Go to the documentation of this file.
1/**
2 @file mm_getauthinfo.sas
3 @brief Extracts authentication info for each user in metadata
4 @details
5 Usage:
6
7 %mm_getauthinfo(outds=auths)
8
9
10 @param [in] mdebug= (0) Set to 1 to enable DEBUG messages and preserve outputs
11 @param [out] outds= (mm_getauthinfo) The output dataset to create
12
13 <h4> SAS Macros </h4>
14 @li mf_getuniquefileref.sas
15 @li mf_getuniquename.sas
16 @li mm_getdetails.sas
17 @li mm_getobjects.sas
18
19
20 @version 9.4
21 @author Allan Bowe
22
23 @sasjslint {"noUnusedMacros": false}
24**/
25
26%macro mm_getauthinfo(outds=mm_getauthinfo
27 ,mdebug=0
28)/*/STORE SOURCE*/;
29%local prefix fileref;
30%let prefix=%substr(%mf_getuniquename(),1,25);
31
32%mm_getobjects(type=Login,outds=&prefix.0)
33
34%local fileref;
35%let fileref=%mf_getuniquefileref();
36
37data _null_;
38 file &fileref;
39 set &prefix.0 end=last;
40 /* run macro */
41 str=cats('%mm_getdetails(uri=',id,",outattrs=&prefix.d",_n_
42 ,",outassocs=&prefix.a",_n_,")");
43 put str;
44 /* transpose attributes */
45 str=cats("proc transpose data=&prefix.d",_n_,"(drop=type) out=&prefix.da"
46 ,_n_,"(drop=_name_);var value;id name;run;");
47 put str;
48 /* add extra info to attributes */
49 str=cats("data &prefix.da",_n_,";length login_id login_name $256; login_id="
50 ,quote(trim(id)),";set &prefix.da",_n_
51 ,";login_name=trim(subpad(name,1,256));drop name;run;");
52 put str;
53 /* add extra info to associations */
54 str=cats("data &prefix.a",_n_,";length login_id login_name $256; login_id="
55 ,quote(trim(id)),";login_name=",quote(trim(name))
56 ,";set &prefix.a",_n_,";run;");
57 put str;
58 if last then do;
59 /* collate attributes */
60 str=cats("data &prefix._logat; set &prefix.da1-&prefix.da",_n_,";run;");
61 put str;
62 /* collate associations */
63 str=cats("data &prefix._logas; set &prefix.a1-&prefix.a",_n_,";run;");
64 put str;
65 /* tidy up */
66 str=cats("proc delete data=&prefix.da1-&prefix.da",_n_,";run;");
67 put str;
68 str=cats("proc delete data=&prefix.d1-&prefix.d",_n_,";run;");
69 put str;
70 str=cats("proc delete data=&prefix.a1-&prefix.a",_n_,";run;");
71 put str;
72 end;
73run;
74
75%if &mdebug=1 %then %do;
76 data _null_;
77 infile &fileref;
78 if _n_=1 then putlog // "Now executing the following code:" //;
79 input; putlog _infile_;
80 run;
81%end;
82%inc &fileref;
83filename &fileref clear;
84
85/* get libraries */
86proc sort data=&prefix._logas(where=(assoc='Libraries')) out=&prefix._temp;
87 by login_id;
88data &prefix._temp;
89 set &prefix._temp;
90 by login_id;
91 length library_list $32767;
92 retain library_list;
93 if first.login_id then library_list=name;
94 else library_list=catx(' !! ',library_list,name);
95proc sql;
96/* get auth domain */
97create table &prefix._dom as
98 select login_id,name as domain
99 from &prefix._logas
100 where assoc='Domain';
101create unique index login_id on &prefix._dom(login_id);
102/* join it all together */
103create table &outds as
104 select a.*
105 ,c.domain
106 ,b.library_list
107 from &prefix._logat (drop=ishidden lockedby usageversion publictype) a
108 left join &prefix._temp b
109 on a.login_id=b.login_id
110 left join &prefix._dom c
111 on a.login_id=c.login_id;
112
113%if &mdebug=0 %then %do;
114 proc datasets lib=work;
115 delete &prefix:;
116 run;
117%end;
118
119
120%mend mm_getauthinfo;