在Sharepoint 2013上以编程方式模拟用户(C#)

问题描述:

这可能是一个奇怪的问题,但我希望实现的功能是允许特定用户查看SharePoint页面,就好像他们以不同用户身份登录一样。在Sharepoint 2013上以编程方式模拟用户(C#)

比方说,我们有一个学生页面和一个职员页面。我不是学生,但我想以一个学生的身份登录,以便能够查看学生页面。那有意义吗?所以,在某种程度上,模仿。

我发现了一些模拟代码,它工作正常,但它不是我想要的。我能够在单独的SPWeb对象中模拟用户。但是,如何更改活动SPWeb对象的当前用户上下文?

下面是我得到了什么:

private void ImpersonateUser() 
    { 
     string siteURL = "http://mywebsite/"; 
     SPSite parentSite = new SPSite(siteURL); 
     SPUserToken systemToken = parentSite.SystemAccount.UserToken; 
     using (SPSite site = new SPSite(siteURL, systemToken)) 
     { 
      using (SPWeb web = site.OpenWeb()) 
      { 
       web.AllowUnsafeUpdates = true; 
       OpenUserContext(web, siteURL, @"domain\studentuser"); 
      } 
     } 
    } 

    private void OpenUserContext(SPWeb web, string siteURL, string user) 
    { 
     try 
     { 
      SPUser ensure = web.EnsureUser(user); 
      SPSite impSite = new SPSite(siteURL, ensure.UserToken); 
      SPWeb impWeb = impSite.OpenWeb(); 

      // Do something as impersonated user 
      label1.Text = "Currently logged in as: " + impWeb.CurrentUser.ToString() + "(" + impWeb.CurrentUser.Name + ")"; 

     } 
     catch (Exception ex) { label1.Text = ex.Message + "<br>" + user; } 
    } 

非常感谢。

虽然SharePoint确实允许您的代码在模仿用户的同时与其进行交互,但它不支持让您像浏览其他用户一样浏览和查看内容。

但是,您可以编写您的自定义文件来考虑您的愿望,并向他们添加模拟逻辑(但这取决于您的实施,SP不会帮助您)。 Project Server的功能与您所要求的一样,但仅限于Project Server拥有的元素。

+0

如果您实施自己的安全令牌服务,并且在用户登录时说谎,说您的用户实际上是其他人,我可以看到它正在完成 - 这不是我已经玩过的东西... – Choggo 2015-01-28 17:37:24

+0

Valeu! !这是我们已经实现的功能,并且我希望能够在SharePoint中执行相同的功能。你有开发和部署Web部件的经验吗? – Naner 2015-01-28 22:41:32

+0

是的,我确实有过这样的经历 – Choggo 2015-01-28 22:44:19

如果您的模拟代码在SharePoint中的自定义.aspx页面后执行,则可以以编程方式将xsltlistviewwebpart添加到该页面,以便在模拟的上下文中显示一个或多个列表视图。