我正在尝试获取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部件]
答案 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身份验证,您可以向域用户授予对该网站的访问权限,并且它应该可以正常工作。