Проверка прав пользователя для определенного сайта в SharePoint - PullRequest
0 голосов
/ 25 мая 2011

Мне нужно проверить, есть ли у конкретного пользователя программный доступ к сайту / дочернему сайту в SharePoint.

Примечание: входящий в систему пользователь может иметь доступ к нескольким сайтам на моем сайте SharePoint.Поэтому я должен показывать только сайты, на которые у пользователя есть разрешение.

Я использовал:

   using (SPWeb web = new SPSite(url).OpenWeb())
                {
                    SPWebCollection Sites = web.Webs;

                    foreach (SPWeb website in Sites)
                    {
                        SPUser loginUser = website.CurrentUser;
                        string username = loginUser.Name;
                        if (!website.IsRootWeb)
                        {
                            SPWebCollection subsites = website.Webs;
                            foreach (SPWeb supersubsite in subsites)
                            {

                                SPWebCollection thirdlevelsites = supersubsite.Webs;
                                foreach (SPWeb thirdlevel in thirdlevelsites)
                                {

thirdlevel.Site.CatchAccessDeniedException = false;
                                bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);
                                if (check)
                                {
                                }
                                thirdlevel.Site.CatchAccessDeniedException = true;                                   
                                }

                            }
                        }
                    }
                }

, но получаю ошибку при

bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);

как:

Доступ запрещен.(Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

1 Ответ

2 голосов
/ 26 мая 2011

Если вы работаете с сайтом публикации, вы должны полагаться на PortalSiteMapProvider (CombinedNavSiteMapProvider, CurrentNavSiteMapProvider, GlobalNavSiteMapProvider, WebSiteMapProvider и т. Д. В зависимости от ваших потребностей навигации), так как этот ужеОбрезка полностью безопасна, и вы сможете пройтись по всему дереву с максимальной производительностью.

В противном случае вам следует использовать GetSubwebsForCurrentUser() в вашем объекте SPWeb, этот метод будет возвращать только веб-страницыдоступно для текущего пользователя.

Надеюсь, это поможет.

...