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

时间:2015-01-26 20:28:17

标签: c# sharepoint sharepoint-2013 impersonation spweb

这可能是一个奇怪的问题,但我想要实现的功能是允许特定用户查看SharePoint页面,就好像他们以不同用户身份登录一样。

假设我们有一个学生页面和一个员工页面。我不是学生,但我想以一个人的身份登录,以便能够像学生一样查看学生页面。那有意义吗?所以,在某种程度上,冒充。

我找到了一些模拟代码,它工作正常,但它不是我想要的。我能够在单独的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; }
    }

非常感谢。

2 个答案:

答案 0 :(得分:0)

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

然而,您可以编写自定义代码以考虑您的需求并为其添加模拟逻辑(但这取决于您实施,而SP将无法帮助您)。 Project Server会执行类似于您所要求的操作,但仅限于Project Server拥有的元素。

答案 1 :(得分:0)

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