非常奇怪的边缘情况令我困惑。我有一个Web服务,它返回一个站点URL列表的权限列表。要确定用户是否具有该站点的权限,我使用以下代码。
[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。如果“DOMAIN \ domain users”用于提供访问权限,那么在ONE PARTICULAR SITE上,reult是错误的。所有其他网站似乎工作正常。
您可以直接添加用户,它会立即返回true以进行访问,但由于某种原因,当使用“域用户”提供访问权限时,此站点和此站点不会返回真正的响应。
任何线索?
答案 0 :(得分:0)
除了这可能是本地配置问题之外,我尝试的是调用SPSite.RootWeb而不是SPSite.OpenWeb()。
(只是评论,请记住,根据siteList的长度,这可能很慢,产生许多数据库往返。)