Сбросить разрешение библиотеки страниц для анонимного пользователя в SharePoint - PullRequest
0 голосов
/ 24 февраля 2010

На уровне семейства сайтов есть библиотека страниц, которая была создана вместе со всем сайтом. Я не трогал его долгое время, пока недавно не добавил новые типы контента, изменил некоторые макеты страниц и главные страницы, используя файл решения. При доступе к домашней странице с использованием сайта, настроенного для анонимного пользователя, произошла ошибка с ошибкой «401 НЕСАНКЦИОНИРОВАННО» на веб-странице. Я заметил, что URL был /_layouts/AccessDenied.aspx?Source = ... & Type = list & name = {...} Затем я копирую эту строку на сайт для аутентифицированного пользователя, она выглядит как «Ошибка: доступ запрещен». Я также проверил guid name = {...}. Это идентификатор списка библиотек страниц.

Казалось, что права доступа к библиотеке страниц установлены неправильно. Однако все остальные библиотеки страниц дочерних сайтов работают хорошо под анонимным пользователем, используя тот же новый тип контента, главную страницу и макеты страниц. Их разрешения идентичны на странице настроек (все наследуются от родительского), и для всех разрешено «разрешать анонимно».

Я также пытался создавать страницы с другими макетами страниц в этой библиотеке страниц, очищать типы контента, все не помогло.

1 Ответ

0 голосов
/ 25 февраля 2010

Это не проблема разрешения библиотеки страниц, скорее это связано с кодом, который я изменил. SPContext.Current.Site.RootWeb является ссылкой анонимного пользователя. Этот пользователь не имеет прав доступа к корневой папке. Я предполагал, что SPContext.Current.Site.RootWeb.RootFolder.WelcomePage будет работать с повышенными привилегиями, но после некоторого чтения я понял, что это не повышает привилегию, как я думал. Вот объяснение .

    bool rtn = false;               
    SPWeb rootWeb = SPContext.Current.Site.RootWeb;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(rootWeb.Site.Url))
        {
            using (SPWeb web = site.OpenWeb())
            {
                rtn = web.Url + "/" + web.RootFolder.WelcomePage
                      == this.Page.Request.Url.AbsoluteUri;
            }
        }
    });
    return rtn;
...