Иллюстрированный самоучитель по Architecture .NET

Другие классы личностей

Теперь более подробно рассмотрим другие классы личностей. Сейчас в .NET Framework есть четыре таких класса:

  • FormsIdentity используется классом FormsAuthenticationModule. Мы поговорим о классе Forms Identity, когда будет обсуждаться опознавание форм ASP.NET;
  • Genericldentity может представлять любого пользователя. Этот класс используется вместе с GenericPrincipal для общих или пользовательских личностей и принципалов;
  • Passportldentity используется при опознавании по схеме Passport (Паспорт). Так как Passport (Паспорт) мы не обсуждаем, то речи об этом классе вести не будем;
  • WindowsIdentity представляет пользователя Windows. У экземпляра WindowsPrincipal значением его свойства Identity будет экземпляр Windowsldentity. Для аутентифицированных пользователей доступен тип используемого опознавания (NTLM, Kerberos (Цербер) и т.д.).

Обратите внимание, что свойства интерфейса Identity доступны только для чте-"ния и поэтому не могут быть изменены.

Даже если ваши пользователи не аутентифицированы, вы все равно можете получить Windowsldentity для любого потока. Экземпляр Windowsldentity для текущего пользователя можно получить, используя статический метод Windowsldentity::GetCurrent. И тогда из этого экземпляра Windowsldentity можно с помощью конструктора WindowsPrincipal получить экземпляр WindowsPrincipal. Ну, а что представляет собой эта личность, мы обсудим в следующем разделе.

Среди примеров этой главы не было варианта программы HotelBroker, который нельзя запускать, если у вас нет роли HotelBrokerAdmin. Однако нужные изменения в предыдущем варианте вы можете сделать сами. В качестве руководства используйте следующий код:

AppDomain *ap = AppDomain::CurrentDomain; ap › SetPrincipalPolicy(
PrincipalPolicy::WindowsPrincipal); IPrincipal *ip;
ip = Thread::CurrentPrincipal;
String *hotelAdminRole = "HPDESKTOP\\HotelAdmin";
// Строка if(!ip › IsInRole(hotelAdminRole)) {
MessageBox::Show(
"Sorry. You must be a Hotel Administrator.",
// "Жаль. Вы должны быть Администратором гостиницы.",
"Acme Customer Management System",
// "Система управления Клиентами Acme ",
MessageBoxButtons::ОК,
MessageBoxIcon::Exclamation);
// Восклицательный знак
return 0; }
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.