SharePoint 2010更改RunWithElevatedPrivileges的上下文

SharePoint 2010更改RunWithElevatedPrivileges的上下文,sharepoint,sharepoint-2010,sitecollection,Sharepoint,Sharepoint 2010,Sitecollection,我有两个网站集,让我们把它们称为A和B。在A中,我有一些内容的列表,我想跨多个网站集进行同步。我已经创建了一个自定义内容查询web部件来查询数据,但我遇到了一个障碍 由于用户级别的帐户根本无权访问站点A,并且我不希望他们在任何级别访问此站点,因此当我的web部件在站点B上运行时,我会收到一个拒绝访问错误。是否有方法更改RunWithElevatedPrivileges工作的上下文 从网站集B运行的当前代码如下所示 ClientContext clientContext = new ClientC

我有两个网站集,让我们把它们称为A和B。在A中,我有一些内容的列表,我想跨多个网站集进行同步。我已经创建了一个自定义内容查询web部件来查询数据,但我遇到了一个障碍

由于用户级别的帐户根本无权访问站点A,并且我不希望他们在任何级别访问此站点,因此当我的web部件在站点B上运行时,我会收到一个拒绝访问错误。是否有方法更改RunWithElevatedPrivileges工作的上下文

从网站集B运行的当前代码如下所示

ClientContext clientContext = new ClientContext(siteAUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle(listName);

CamlQuery query = new CamlQuery();
//Add View, Execute Query, etc.

return results;

如果我将其包装在SPSecurity.RunWithElevatedPrivileges中,它将在网站集B上下文中以提升的权限运行,而我更希望它在网站集A上下文中运行

请记住,SPSecurity.RunWithElevatedPrivileges正在应用程序池帐户的安全上下文中运行代码。 因此,除非您在不同的Web应用程序中运行网站集,否则它们将具有相同的上下文。i、 e.掌握所有被调查的内容


如果您跨网站集运行,应用程序池帐户将指定对其他web应用程序的权限

请记住,SPSecurity.RunWithElevatedPrivileges正在应用程序池帐户的安全上下文中运行代码。 因此,除非您在不同的Web应用程序中运行网站集,否则它们将具有相同的上下文。i、 e.掌握所有被调查的内容


如果您跨网站集运行,应用程序池帐户将指定对其他web应用程序的权限

SharePoint 2010客户端对象模型不支持
SPSecurity.RunWithElevatedPrivileges
。@Nat声明此调用将线程标识还原为应用程序池帐户(SystemAccount)。由于您的代码在客户端上运行,因此无法将标识还原到应用程序池帐户。 通过客户端对象模型以系统帐户的形式运行代码将打开一个安全漏洞。每个人都可以作为管理员编写和执行代码

如果您的代码在服务器上运行,则可以使用
SPUserToken.SystemAccount
打开带有系统帐户凭据的
SPSite

using (SPSite site = new SPSite("http://someurl", SPUserToken.SystemAccount))
{
  // admin action here
}

有关详细信息,请查看我的博客。

SharePoint 2010客户端对象模型不支持
SPSecurity.runWithLevelatedPrivileges
。@Nat声明此调用将线程标识还原为应用程序池帐户(SystemAccount)。由于您的代码在客户端上运行,因此无法将标识还原到应用程序池帐户。 通过客户端对象模型以系统帐户的形式运行代码将打开一个安全漏洞。每个人都可以作为管理员编写和执行代码

如果您的代码在服务器上运行,则可以使用
SPUserToken.SystemAccount
打开带有系统帐户凭据的
SPSite

using (SPSite site = new SPSite("http://someurl", SPUserToken.SystemAccount))
{
  // admin action here
}
查看我的博客文章了解更多信息