Программирование средств безопасности в SharePoint 2007 - Внешние участники безопасности и объект SPUser

ОГЛАВЛЕНИЕ

Внешние участники безопасности и объект SPUser

Большинство моделей безопасности основаны на участниках безопасности. Каждый участник безопасности представляет пользователя, либо группу. У пользователей имеются учетные записи, для использования которых им надо подтвердить свою подлинность. По завершении проверки подлинности, каждый пользователь получает идентификатор. В случае, когда пользователь использует учетную запись Windows для удостоверения своей личности, классы безопасности Microsoft® .NET Framework в пространстве имен System.Security можно использовать для извлечения идентификатора, указывающего обратно на конкретную учетную запись Windows, что дает возможность обнаружить имя пользователя:

WindowsIdentity identity = WindowsIdentity.GetCurrent();
string WindowsLogin = identity.Name;

Используя WindowsIdentity, можно динамически создать WindowsPrincipal, что позволит выполнить тест, для проверки, является ли текущий пользователь членом группы Active Directory®, или локальной группы Windows:

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
if( principal.IsInRole(@"LITWAREINC\AllFTE") ){
  // perform operation allowed for fulltime employees
}

ASP.NET поддерживает как проверку подлинности Windows, так и проверку подлинности на основе форм (FBA). Объект User в ASP.NET абстрагирует зависимость от учетной записи Windows, моделируя объект User на интерфейсе класса IPrincipal, вместо WindowsPrincipal. Среда ASP.NET динамически создает различные типы объектов IPrincipal, в зависимости от того, произведена ли проверка подлинности пользователя с использованием учетной записи Windows, или учетной записи FBA:

IPrincipal AspUser = HttpContext.Current.User;
string AspUserName = AspUser.Identity.Name;

Объект User в ASP.NET также предоставляет способ проверить, принадлежит ли пользователь к определенной роли, путем использования метода IsInRole. Пользователям Windows метод IsInRole позволяет увидеть, является ли текущий пользователь членом группы Active Directory. Если учетная запись FBA используется вместе с поставщиком ролей ASP.NET Role Provider, метод IsInRole можно также использовать, чтобы проверить, добавлен ли пользователь FBA к конкретной роли ASP.NET:

IPrincipal AspUser = HttpContext.Current.User;
if(AspUser.IsInRole("Site Administrators") {
  // perform privileged operation
}

Выполнение проверки подлинности создает ту или иную форму уведомления, которая используется системой во время работы, чтобы представлять личность пользователя и отслеживать членство в группах или ролях. Когда пользователь демонстрирует свою подлинность учетной записи Windows, уведомлением о подтверждении подлинности является маркер безопасности Windows. Когда пользователь демонстрирует свою подлинность учетной записи FBA, уведомлением о подтверждении подлинности является файл cookie HTTP, созданный ASP.NET и специальной службой проверки подлинности.

Важно понимать, что WSS не предоставляет поддержки для проверки подлинности пользователей. Вместо этого, WSS использует базовые компоненты проверки подлинности, предоставляемые различными службами проверки подлинности ASP.NET. Вклад, который WSS вносит в безопасность веб-узла относится к настройке проверки подлинности и контроля доступа. WSS делает возможным отслеживание внешних участников безопасности, таких как пользователи Windows, пользователи FBA, группы Windows и роли ASP.NET, в масштабе семейства веб-узлов. С помощью WSS, можно также настраивать разрешения, выделяемые этим внешним участникам безопасности, которые, по сути, дают пользователям разрешение на доступ к объектам WSS, которые могут быть защищены, включая веб-узлы, списки, элементы и документы.

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

Объектная модель WSS представляет внешних участников безопасности, используя объекты SPUser. Объект SPUser для текущего пользователя можно получить через текущий объект SPWeb:

SPWeb site = SPContext.Current.Web;
SPUser user = site.CurrentUser;
string DisplayName = user.Name;
string Login = user.LoginName;
string EMail = user.Email;
string User Notes = user.Notes;

Объект SPUser демонстрирует свойства внешнего участника безопасности, такие как имя пользователя, отображаемое имя и адрес электронной почты. Эти свойства обычно извлекаются из базового хранилища пользователей, такого как домен Active Directory, при добавлении внешних участников к веб-узлу. Объект SPUser также демонстрирует свойства, отслеживающие относящиеся к WSS метаданные, скажем поле Notes («Заметки»).
WSS держит данные профилей для внешних пользователей, групп и ролей в скрытом списке, известном как список данных о пользователях (User Information List). Каждый раз при обеспечении всем необходимым нового семейства веб-узлов, WSS автоматически создает список данных о пользователях как скрытый список на веб-узле верхнего уровня. Затем WSS добавляет новый профиль для каждого внешнего участника безопасности, в тот момент, когда этому участнику выдается разрешение, или он проходит проверку безопасности для доступа к защищаемому объекту. Отметьте, что профиль пользователя, сохраненный в списке данных о пользователях не распространяется на другие семейства веб-узлов – когда пользователи обновляют настройки своих профилей в одном семействе, настройки их профилей в других семействах не меняются.

Другим возможным источником путаницы является то, что объекты SPUser не всегда представляют реальных пользователей. Объекты SPUser могут также представлять группы Active Directory и роли ASP.NET. WSS отслеживает профиль для каждого из этих типов внешних пользователей в списке данных о пользователях , вместе с данными профилей для внешних пользователей.

Многие аспекты программирования модели безопасности SharePoint открываются на уровне веб-узла, через объекты SPWeb. Это происходит и в случае необходимости обнаружить, какие пользователи являются членами текущего веб-узла. Объект SPWeb раскрывает три различных семейства пользователей, как показано в следующем фрагменте программного кода:

SPWeb site = SPContext.Current.Web;
SPUserCollection c1 = site.Users;
SPUserCollection c2 = site.AllUsers;
SPUserCollection c3 = site.SiteUsers;

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

Семейство AllUsers включает всех членов Users, а кроме того внешних пользователей, получавших доступ к объектам на веб-узле с использованием непрямых разрешений, полученных через членство в группе или роли. Например, представьте себе пользователя по имени Брайан, с именем входа LITWAREINC\BrianC, которому никогда не давалось прямых разрешений на доступ к веб-узлу и просмотр определенного списка. Однако, он все же может иметь возможность просмотреть список, благодаря своему членству в группе Active Directory, которой дано разрешение на это. При первом доступе Брайана к веб-узлу, или одному из объектов на нем (скажем, к списку, использующему непрямые разрешения), он добавляется в семейство AllUsers, но не в Users.

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