ASP.NET - 临时模拟应用程序池服务ID时,默认情况下它模拟用户?
-
20-08-2019 - |
题
我必须调用在根据该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
不隶属于 StackOverflow