ASP.NET - 默认情况下模拟应用程序池服务ID以模拟用户?

时间:2009-01-27 20:45:49

标签: asp.net sharepoint impersonation

我必须在SharePoint网站中调用一些代码,这些代码在运行Web应用程序的相同服务ID下运行。默认情况下,SharePoint会模拟查看网页的用户,并且用户没有必要的权限。

使用Web应用程序的服务ID运行某些代码的最佳方法是什么,然后恢复使用默认模拟?

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

Nat是对的。您应该使用SPSecurity.RunWithElevatedPrivileges。在封面下它有一个安东尼提到的ReverToSelf,但使用辅助方法要容易得多。您可以使用内联委托,如以下示例所示。

要实现的主要事情是此委托在单独的应用程序域下运行,这基本上意味着您要使用SPSite或SPWeb,您必须在委托中重新实例化它们,如下所示。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    // Your are now inside the delegate
    // Anything provided within this block is marshaled across the app domain
    using (SPSite site = new SPSite("http://myserver/sites/mysite"))
    {
        using (SPWeb web= site.OpenWeb())
        {
            // Do stuff here
        }
    }
});

答案 2 :(得分:0)

在ASP下我有一个实用程序DLL,我可以使用它来调用Win32的RevertToSelf()函数(在advapi32.dll中找到),以使ASP在应用程序池的标识下运行。

当然,一旦那里,就没有回到线程正在使用的原始身份,但这不是一个真正的问题。当前请求结束后,下一个请求将在用户标识(或匿名用户)下再次运行。

你可能会对ASP.NET中的PInvoke做同样的事情,但我不知道它可能对框架产生什么影响。我确信它只能用于当前的请求。我认为没有任何标准的.NET API可以做到这一点。

答案 3 :(得分:0)

容易!在HostingEnvironment.Impersonate()块中包含您正在进行的调用。

http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.impersonate.aspx