Sharepoint DoesUserHavePermissions为“0”返回false;域\域用户“;
非常奇怪的边缘案例让我困惑。我有一个web服务,它返回站点URL列表的权限列表。要确定用户是否具有该站点的权限,我使用以下代码Sharepoint DoesUserHavePermissions为“0”返回false;域\域用户“;,sharepoint,Sharepoint,非常奇怪的边缘案例让我困惑。我有一个web服务,它返回站点URL列表的权限列表。要确定用户是否具有该站点的权限,我使用以下代码 [WebMethod] public GetSiteListPermissionsResponseCollection GetSiteListPermissions(string[] siteList) { GetSiteListPermissionsResponseCollection siteListRetur
[WebMethod]
public GetSiteListPermissionsResponseCollection GetSiteListPermissions(string[] siteList)
{
GetSiteListPermissionsResponseCollection siteListReturn = new GetSiteListPermissionsResponseCollection();
foreach (string key in siteList)
{
string escapedKey = Uri.EscapeUriString(key);
if (Uri.IsWellFormedUriString(escapedKey, UriKind.Absolute))
{
bool originalCatchValue = SPSecurity.CatchAccessDeniedException;
SPSecurity.CatchAccessDeniedException = false;
try
{
using (SPSite site = new SPSite(escapedKey, SPContext.Current.Site.SystemAccount.UserToken))
{
using (SPWeb web = site.OpenWeb())
{
siteListReturn.Add(new GetSiteListPermissionsResponse(key, web.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open).ToString()));
}
}
}
catch
{
siteListReturn.Add(new GetSiteListPermissionsResponse(key, false.ToString()));
}
finally
{
SPSecurity.CatchAccessDeniedException = originalCatchValue;
}
}
}
return siteListReturn;
}
这工作得相当好,但我们遇到了一个非常奇怪的实例,其中DoesUserHavePermissions返回False。如果使用“域\域用户”提供访问,则在某个特定站点上,reult为false。所有其他网站似乎都运行良好
您可以直接添加用户,它会立即返回一个true for access,但由于某些原因,当使用“域用户”提供访问权限时,此站点和仅此一个站点不会返回true响应
有什么线索吗?除了可能是本地配置问题之外,我会尝试调用SPSite.RootWeb而不是SPSite.OpenWeb()
(只是一个注释,请记住,根据站点列表的长度,这可能会很慢,产生许多DB往返。)字符串URL可能包含一个子站点,因此需要使用OpenWeb,以便返回用于构建SPSite的URL中使用的SPWeb。我不确定哪些配置设置会导致一个站点在检查权限方面表现出与其他站点不同的行为,但我愿意接受建议。