尝试读取有关SharePoint组的信息时拒绝访问

时间:2009-11-05 22:34:26

标签: sharepoint-2007 permissions wss-3.0

我正在尝试获取WSS 3.0中组的成员资格。我在一个提升的权限块中执行此操作。这是代码:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
   using (SPSite site = new SPSite(SPContext.Current.Site.ID))
   {
      using (SPWeb rootWeb = site.RootWeb)
      {
         SPGroup gAdmins = rootWeb.SiteGroups["Admins"];
      }
   }
});

运行此代码时,我将进入“拒绝访问”SharePoint屏幕。 该组织存在。 Web应用程序的应用程序池的标识位于内容数据库中的dbo角色中。 代码可以在我的开发服务器上运行,但不能在另一台服务器上运行,这让我相信这台服务器上的权限或配置有问题,可能是dcomcnfg中有什么问题?

以下是SharePoint日志中似乎相关的一些行:

PermissionMask check failed. asking for 0x08000000, have 0x00000000    
Unknown SPRequest error occurred. More information: 0x80070005   
Access Denied for /Pages/UserAdmin.aspx. StackTrace: Microsoft.SharePoint.Utilities.SPUtility:Void HandleAccessDenied(System.Exception), Microsoft.SharePoint.SPGlobal:Void HandleUnauthorizedAccessException(System.UnauthorizedAccessException), ....

[UserAdmin.aspx托管包含代码的自定义Web部件]

2 个答案:

答案 0 :(得分:1)

代码行中的问题“SPSite site = new SPSite( SPContext.Current.Site.ID )”获取RWEP范围之外的Site.ID,然后按以下方式创建SPSite对象:传递该ID。问题是因为SPContext.Current是针对实际用户的,如果您尝试在RWEP下访问它,它可能会给您带来问题或意外错误。

答案 1 :(得分:0)

看起来这种情况正在发生,因为我在提升的权限中运行。这是一个非扩展的FBA站点,这意味着域帐户不会也无法访问它。当您以提升的权限运行时,您将作为应用程序池标识运行,该标识通常是域帐户。然后WSS会抛出一个错误,因为您突然从FBA用户切换到无法访问该站点的域用户。

如果您将网站扩展为使用除了FBA之外的Windows身份验证,您可以向域用户授予对该网站的访问权限,并且它应该可以正常工作。