Страница приложения в папке макетов с доступом к объекту веб-приложения

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/95825

Вопрос

Есть страница приложения, развернутая в папку макетов.

URL-адрес страницы приложения:

  • http://server:port/sc2/_layouts/test/mypage.aspx

Теперь есть пользователь с правами только на чтение (добавлен в группу посетителей).Пользователь добавляется только в это семейство веб-сайтов (sc2) и ни в какое другое место.

Код осуществляет доступ к семейству веб-сайтов 01 (в том же веб-приложении) и получает доступ к списку в этом семействе веб-сайтов.Пользователь не имеет никаких прав/разрешений для семейства веб-сайтов 01.

Вот код страницы приложения:

 SPSite site = SPContext.Current.Site.WebApplication.Sites[0];

    SPWeb rootWeb = site.RootWeb;

                        SPList spList = rootWeb.Lists.TryGetList("myList");
                        if (spList != null)
                        {
                            SPQuery qry = new SPQuery();
                            qry.Query =
                            @"   <OrderBy>
      <FieldRef Name='Created' Ascending='False'/>
   </OrderBy>";
                            qry.ViewFields = @"<FieldRef Name='Title' /><FieldRef Name='Col2' />";
                            SPListItemCollection listItems = spList.GetItems(qry);
                            if (listItems.Count > 0)
                            {
                                MyDiv.InnerHtml = listItems[0]["Col2"].ToString();
                            }
                        }

Когда мы входим в систему под этим пользователем (с разрешениями только на чтение), мы замечаем, что код запускается успешно.Не должно ли это выдавать ошибку, потому что мы не используем RunWithElevatedPriviledges?

Я считаю, что в строке 1 следует выдать исключение и не продолжать дальше.

Это было полезно?

Решение

Код правильный и все в порядке!при доступе к страницам aspx на сервере он не запускается под учетной записью пула приложений, он работает под учетной записью, аутентифицированной nt, которая должна быть вашей собственной!откуда мне знать?Я постоянно использую aspx на странице макетов, и предоставление/запрет доступа к учетной записи пула приложений не повлияет на это!хорошим примером могут быть два пользователя..один администратор семейства веб-сайтов, а другой - обычный пользователь.

Администратор коллекции сможет нормально получить доступ к файлу, тогда как обычному пользователю будет отказано в доступе...оба, как утверждает твейтьенс, должны иметь доступ для чтения, но у них его нет!почему?потому что, если вы не добавите группу пользователей в список пользователей веб-приложения (внутри центрального администратора) с правами на чтение, вы не получите доступ к файлам в кусте 14.12.15!запуск с повышенными привилегиями, окружающими код в aspx, означает, что код будет запускаться под учетной записью пула приложений!!!наличие кода, который возвращает ваше имя пользователя в aspx, будет твердо показывать, что я прав, а ответ tweytjens неправильный!под appoolaccount вы получите системную учетную запись, а без нее, если у вас есть доступ, вы получите учетную запись с аутентификацией nt, которая должна быть учетной записью, под которой вы вошли в систему!

это в сторону....объяснить, что происходит..

скажем, у меня есть корневой сайт под названием site1, и у меня есть подсайты site2 и site3.Я нарушаю наследование от сайта 2 и даю пользователю разрешение на чтение только на сайте 2.

Так что у вас не должно быть доступа к сайту http://site1 но должна быть возможность добраться доhttp://site1/site2 без получения отказа в доступе.

причина, по которой вы можете попасть на сайт2, заключается в том, что теперь у вас ограничен доступ к сайту1, чтобы вы могли попасть на сайт2.

Уровень разрешений ограниченного доступа необычен.Это позволяет пользователю или группе просматривать страницу сайта или библиотеку, чтобы получить доступ к конкретному элементу контента.Как правило, пользователю получил доступ к одному элементу в списке или библиотеке, но не имеет разрешения на открытие или редактирование любых других элементов в библиотеке.Уровень разрешений с ограниченным доступом включает в себя все разрешения, необходимые пользователю для доступа к требуемому элементу.

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

http://office.microsoft.com/en-gb/products/understanding-permission-levels-HA102772313.aspx?CTT=5&origin=HA102771919

подробнее о разрешениях объяснено подробно

http://office.microsoft.com/en-gb/office365-sharepoint-online-enterprise-help/introduction-control-user-access-with-permissions-HA102771919.aspx#_Toc352060310

РЕДАКТИРОВАТЬ

центральный администратор -> управление приложениями -> управление веб-приложениями -> щелкните веб-приложение -> щелкните политику пользователя.

это список пользователей, которые будут иметь доступ к уровню веб-приложения._layouts находится на этом уровне, поэтому доступ пользователя будет на этом уровне.

запуск с повышенными привилегиями приведет к тому, что текущая учетная запись будет работать как учетная запись пула системных приложений.без запуска с повышенными привилегиями вы бы работали под своей обычной учетной записью, но вам потребуется доступ для чтения на уровне веб-приложения, в противном случае вам будет отказано в доступе!

для проблемы доступа к вашему сайту, которая частично связана с вышеизложенным, а также частично с тем фактом, что существует политика ограниченного доступа, установленная SharePoint!.

РЕДАКТИРОВАТЬ

да я уже написал почему!Sharepoint предоставляет ограниченный доступ для чтения, поэтому вы можете получить доступ к URL-адресу sitecolection 2, иначе вы не смогли бы этого сделать.Запуск на сервере не имеет к этому никакого отношения!код запускается под пользователем, прошедшим проверку подлинности nt!и определенно не учетная запись пула приложений!

Тот факт, что код запускается под сервером, не означает, что он запускается под учетной записью пула приложений!Единственный способ, которым это произойдет, - это установить runwithelevatedprivlages, иначе вы предоставите всем пользователям ненужный доступ!Чтобы доказать свою точку зрения!

в ваш aspx.cs добавьте следующий код, он покажет вам текущего пользователя...именно этот пользователь используется в текущем контексте, и именно этот пользователь используется для доступа к сайту и файлам _layouts внутри куста!

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    string strUserName = SPContext.Current.Web.CurrentUser.LoginName;
    Label l = new Label();
    l.id = "userID";
    l.Text = strUserName;
    this.Controls.Add(l);
}

Если вы видите системную учетную запись, а не ее учетную запись пула приложений....если вы видите обычную учетную запись пользователя, значит, она не работает в пуле приложений!Если он работает под учетной записью пула приложений, вам следует беспокоиться, поскольку вы предоставляете ненужный доступ, что противоречит передовой практике.

как мне узнать, что он работает под учетной записью, аутентифицированной nt?ну просто попробуйте получить доступ к файлу как к раздражающему :) вам будет отказано в доступе...для этого вам нужно выдать себя за другое лицо, поскольку даже повышенные привилегии не работают!

SharePoint – доступ к пути запрещен

Другие советы

Поскольку код находится на странице .aspx, он запускается на сервере и будет работать с учетными данными учетной записи пула приложений, под которой запускается это приложение, а не с учетными данными клиента, как, например.Подойдет клиентский код Silverlight или Javascript.

Ни один код не должен вызывать никаких исключений.поскольку у пользователя есть разрешения на чтение, и я надеюсь, что список также наследует разрешения от сайта, это означает, что у пользователя также есть разрешения на чтение в списке.

Таким образом, если вы попытаетесь добавить элемент в список, он должен выдать исключение.Чтение/запрос не вызовет никаких исключений.

ОБНОВЛЯТЬ

На самом деле другой ответ кажется правильным

Разрешения на страницы приложений обычно устанавливаются на самой странице приложения, используя правообладавшую собственность.

Вот подробный пост в блоге о безопасности страницы приложения: http://blog-sharepoint.blogspot.com/2011/10/sharepoint-application-page-security.html

Также посмотрите:

Защита страниц приложений SharePoint

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top