DoesUserHavePermissions对“DOMAIN \ domain users”返回false

时间:2009-12-10 20:52:16

标签: sharepoint

非常奇怪的边缘情况令我困惑。我有一个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以进行访问,但由于某种原因,当使用“域用户”提供访问权限时,此站点和此站点不会返回真正的响应。

任何线索?

1 个答案:

答案 0 :(得分:0)

除了这可能是本地配置问题之外,我尝试的是调用SPSite.RootWeb而不是SPSite.OpenWeb()。

(只是评论,请记住,根据siteList的长度,这可能很慢,产生许多数据库往返。)