我必须在SharePoint网站中调用一些代码,这些代码在运行Web应用程序的相同服务ID下运行。默认情况下,SharePoint会模拟查看网页的用户,并且用户没有必要的权限。
使用Web应用程序的服务ID运行某些代码的最佳方法是什么,然后恢复使用默认模拟?
答案 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