Sometimes when creating SharePoint web or console applications, you
may need to execute specific code blocks in another user’s context.
Impersonating users in SharePoint will require a couple of things:
Step 1: Log in as the system account, or get a handle to the system account in your code
Step 2: Before you impersonate, get the user token of the user you are switching to. For example:
Complete code follows:
Impersonating users in SharePoint will require a couple of things:
- the account that the web or console app uses has privileges to impersonate other users (typically this would be the system account)
- specific users’ user tokens
Step 1: Log in as the system account, or get a handle to the system account in your code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //we just need to get a handle to the site for us //to get the system account user token SPSite tempSite = new SPSite(siteStr); SPUserToken systoken = tempSite.SystemAccount.UserToken; using (SPSite site = new SPSite(siteStr, systoken)) { using (SPWeb web = site.OpenWeb()) { //right now, logged in as Site System Account Console.WriteLine( "Currently logged in as: " + web.CurrentUser.ToString()); //add your code here } } |
1
2
3
4
5
6
7
8
9
10
11
| //get this current user's user token SPUserToken userToken = web.AllUsers[user].UserToken; //create an SPSite object in the context of this user SPSite s = new SPSite(siteStr, userToken); SPWeb w = s.OpenWeb(); Console.WriteLine( "Currently logged in as: " + w.CurrentUser.ToString() + "(" + w.CurrentUser.Name + ")" ); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| private static void impersonateTest() { SPSite tempSite = new SPSite(siteStr); SPUserToken systoken = tempSite.SystemAccount.UserToken; using (SPSite site = new SPSite(siteStr, systoken)) { using (SPWeb web = site.OpenWeb()) { //right now, logged in as Site System Account Console.WriteLine( "Currently logged in as: " + web.CurrentUser.ToString()); switchUser(web, siteStr, "BlackNinjaSoftware/MatthewCarriere" ); switchUser(web, siteStr, "BlackNinjaSoftware/ShereenQumsieh" ); switchUser(web, siteStr, "BlackNinjaSoftware/DonabelSantos" ); } } } private static void switchUser(SPWeb web, string siteStr, string user) { //impersonate somebody else SPUserToken userToken = web.AllUsers[user].UserToken; SPSite s = new SPSite(siteStr, userToken); SPWeb w = s.OpenWeb(); Console.WriteLine( "Currently logged in as: " + w.CurrentUser.ToString() + "(" + w.CurrentUser.Name + ")" ); } |
No comments:
Post a Comment