2

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

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

4

4 回答 4

4

SPSecurity.RunWithElevatedPrivileges

于 2009-01-27T20:56:59.460 回答
3

纳特是对的。您应该使用 SPSecurity.RunWithElevatedPrivileges。在幕后,它执行了 Anthony 提到的 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
        }
    }
});
于 2009-04-08T00:29:05.597 回答
0

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

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

您可能可以对 ASP.NET 中的 PInvoke 执行相同的操作,但我不知道这可能对框架产生什么影响。我敢肯定它只会持续到当前的请求。我认为没有任何标准的.NET API 可以做到这一点。

于 2009-01-27T21:05:31.970 回答
0

简单的!将您正在进行的调用包装在 HostingEnvironment.Impersonate() 块中。

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

于 2009-04-07T22:42:59.517 回答