我想知道为什么下面列出的两种方法不能提供相同的安全修整。
预期结果:这两种方法都可以完全访问当前网站集中的所有内容
实际结果:使用方法#1时发生安全修整
方法#2适用于从其他网站检索内容,但方法#1不能。
这两种方法都可以在匿名模式下通过网络进行访问,并且都适用于网站管理员帐户。
区别在于层次结构管理器,审批者和编辑。方法#1不提供跨网络的管理员访问权限。
方法#1
using (SystemOperation op = new SystemOperation())
{
//Do an operation that requires retrieving across webs
}
public class SystemOperation : IDisposable
{
private WindowsImpersonationContext ctx;
public SystemOperation()
{
if (!WindowsIdentity.GetCurrent().IsSystem)
{
ctx = WindowsIdentity.Impersonate(System.IntPtr.Zero);
}
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool all)
{
if (ctx != null)
{
ctx.Undo();
}
}
}
方法#2:
Microsoft.Sharepoint.SPSecurity.RunWithElevatedPrivileges(delegate()
{
//Do an operation that requires retrieving across webs
});
答案 0 :(得分:1)
RunWithElevatedPrivileges提供两个单独的权限。首先是它将用户的Windows身份提升到AppPool帐户,第二个是它还将身份提升到SharePoint \ System帐户,这是一个内置的安全帐户,提供完全控制(在SharePoint意义上)。构建SP对象(如SPSite)时使用内部SharePoint帐户。
所以基本上它取决于你如何构建你的代码,以及当你设置影响权限如何运作的对象时。