我必须调用在根据该web应用程序下运行的相同的服务ID运行SharePoint站点一些代码。默认情况下,的SharePoint模拟用户浏览网页,和用户没有必要的权限。

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

有帮助吗?

其他提示

纳特是正确的。您应该使用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
        }
    }
});

在ASP我有,我可以用它来调用Win32的了RevertToSelf()函数(在ADVAPI32.DLL找到),以获得ASP下的应用程序池的身份运行程序的DLL。

当然,一旦出现,有没有要回线用的是原来的身份,但是这不是一个真正的问题。一旦当前请求已经结束,下一个请求将根据用户身份(或者匿名用户)再次运行。

您也许可以做相同的PInvoke在ASP.NET,但我不知道可能有什么效果的框架。我敢肯定它会只持续当前的请求。我不认为有任何标准的.NET API来做到这一点。

容易!总结你在一个HostingEnvironment.Impersonate()块使得电话。

http://msdn.microsoft的.com / EN-US /库/ system.web.hosting.hostingenvironment.impersonate.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top