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 tokenSPSite 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 tokenSPUserToken userToken = web.AllUsers[user].UserToken;//create an SPSite object in the context of this userSPSite 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