Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

RUS_-_Karejev_-_Razrabotka_Windows-prilozhenij

.pdf
Скачиваний:
36
Добавлен:
02.02.2015
Размер:
8 Мб
Скачать
☆

EventLogPermission

Журнал событий

FileDialogPermission

Диалоги открытия, сохранения файлов в пользовательском интерфейсе приложения

FileIOPermission

Работа с файлами

IsolatedStorgeFilePermission

Изолированное хранилище файлов

MessageQueuePermission

Очереди сообщений

OleDbPermission

Базы данных, доступ к которым осуществляется средствами поставщика данных OleDB

PerformanceCounterPermission

Счетчики производительности

PrintingPermission

Печать

ReflectionPermission

Информация о типах во время выполнения

RegistryPermission

Реестр

SecurityPermission

Работа с правами доступа

ServiceControllerPermission

Запуск или остановка Windows-служб

SocketPermission

Соединение с компьютером через порты

SqlClientPermission

Базы данных, доступ к которым осуществляется средствами SqlClient провайдера

UIPermission

Пользовательский интерфейс

WebPermission

Соединение с компьютерами через web-интерфейс

В дополнение к встроенным разрешениям вы можете создать собственные, основываясь на классе CustomPermission.

Функционирование безопасностидоступакода

.NET Framework принудительно налагает разрешения на управляемый код. Каждая загружаемая сборка получает набор разрешений на доступ к различным ресурсам. Эти разрешения основаны на политике безопасности. В свою очередь, политика безопасности использует удостоверение сборки для определения набора разрешений. Другими словами, .NET Framework применяет политику безопасности компьютера для назначения набора разрешений.

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

Сборка получает общий набор разрешений от всех членств, к которым она принадлежит.

Уровни безопасности

Существует несколько уровней безопасности: сеть, компьютер, пользователь, домен приложения (дополнительный уровень). В таблице 10.2 дано описание каждого уровня.

 

Таблица 10.2. Уровни безопасности

Уровень безопасности

Описание

Сеть (Enterprise level)

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

 

назначены любому управляемому коду во всей корпоративной сети

Компьютер (Machine)

Уровень контролируется администратором компьютера и содержит группы кода, которые могут быть

 

назначены любому управляемому коду, выполняемому на данном компьютере

Пользователь (User)

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

 

назначены любому управляемому коду, выполняемому от имени данного пользователя

Домен приложения

Дополнительный уровень, позволяющий изолировать, выгружать и ограничивать выполняемый

(Application Domain)

управляемый код

Окончательный набор разрешений получается в результате суммы всех разрешений от каждой сборки, т.к. каждая сборка может иметь свой набор разрешений (рис. 10.4).

Рис. 10.4. Принцип работы безопасности доступа кода

Среда выполнения Common Language Runtime (CLR) также имеет стандартную политику безопасности и использует ее набор разрешений ( табл. 10.3).

 

Таблица 10.3. Набор разрешений CLR

Отсутствие

Отсутствуют какие-либо разрешения. Код не может быть запущен. Код из "небезопасной" зоны использует эту

разрешений

политику безопасности.

(Nothing)

 

Извлечение

Предоставляет разрешение только на запуск приложения. Не разрешает приложению использовать какие-

(Execution)

либо ресурсы

Интернет (Internet)

Предоставляет разрешения на выполнение кода, открытие диалоговых окон, создание web-соединений с

 

сайтом, с которого установлено приложение, и использование изолированного хранилища с ограниченным

 

размером. По умолчанию, весь код из Интернета и "небезопасные" зоны используют эту политику

 

безопасности

Корпоративная

Предоставляет разрешения на запуск кода; его выполнение без ограничений; использование изолированного

интрасеть (Local

хранилища без лимита; использование DNS-служб; использование таких данных, как имя пользователя и

Intranet)

временных переменных; создание web-соединения с сайтами, с которых взяты сборки, используемые в

 

приложении; чтение и сохранение файлов из того же каталога, что и приложение. По умолчанию, весь код из

 

сети использует эту политику безопасности

Весь доступ

Предоставляет все стандартные разрешения, кроме отмены верификации

(Everything)

 

Полный доступ (Full

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

Trust)

компьютера использует эту политику безопасности

Использование безопасностидоступакода

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

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

Взаимодействие с системой безопасности во время выполнения осуществляется двумя способами: императивным и декларативным. Декларативный способ взаимодействия осуществляется с помощью атрибутов, императивный – с помощью объектов классов в вашем приложении. Некоторые операции могут быть выполнены с помощью одного из способов, а некоторые — любым из них.

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

Для того чтобы добавить запрос на определенное разрешение, необходимо добавить соответствующий атрибут в файл ApplicationInfo.cs проекта. При компиляции сборки эти атрибуты сохранятся в метаданных. Запросы на разрешения проверяются CLR во время загрузки сборки. Существует три вида запросов, описание которых приводится в таблице 10.4.

 

Таблица 10.4.

Запрос

Описание запроса

Запрос минимального набора

Запрашивает необходимый минимум для корректной работы приложения. Если это разрешение не

разрешений

назначено политикой безопасности, то CLR не выполнит операции, а сгенерирует исключение типа

(RequestMinimum)

PolicyException. Этим запросом необходимо пользоваться только для минимальных разрешений

 

Представляет набор разрешений, с которыми может работать ваше приложение, но без которых оно

Запрос дополнительного

набора разрешений

сможет корректно выполнять действия. Этим запросом описывают дополнительную

(RequestOptional)

функциональность приложения. Если это разрешение не назначено политикой безопасности, то

 

приложение будет продолжать работать

Запрос на отказ от

Указываются разрешения, которые ваше приложение использовать не будет. Запросы указываются

разрешений (RequestRefused)

для обеспечения дополнительной безопасности

В лекции 2 мы работали с проектом BinaryReadWrite. Скопируйте всю папку проекта и переименуйте ее в Permissions. Снова

поместите в папку bin\Debug какой-нибудь файл формата MP3 и назовите его music.mp3. Запустите проект и убедитесь в том, что в этой же папке появился записанный файл newmusic.mp3. Теперь добавляем пространство имен System.Security и соответствующий блок исключений:

using System; using System.IO;

using System.Security; namespace BinaryReadWrite

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

//Добавляем блок обработки исключений try

{

//Создаем новый поток Chtenie и указываем файл для чтения — music.mp3 FileStream Chtenie = new FileStream("music.mp3", FileMode.Open);

//Создаем экземпляр br класса BinaryReader и связываем его с потоком Chtenie BinaryReader br = new BinaryReader(Chtenie);

// Создаем массив типа байтов и //передаем ему размер в байтах — (например, 1000000 ) записываемого файла byte[] n = br.ReadBytes(1000000);

//Закрываем поток br.Close();

//Создаем новый поток Zapis и указываем название файла для записи

sozdanajamuzika.mp3

FileStream Zapis = new FileStream("newmusic.mp3", FileMode.CreateNew,

FileAccess.Write);

//Создаем экземпляр wr класса BinaryWriter и связываем его с потоком Zapis BinaryWriter wr = new BinaryWriter(Zapis);

// Можно связывать объект wr с потоком, создавая его без названия: //BinaryWriter wr = new BinaryWriter(new FileStream("sozdanajamuzika.mp3",

FileMode.CreateNew, FileAccess.Write));

//Передаем в поток массив байтов n wr.Write(n);

//Закрываем поток br.Close();

}

catch (SecurityException ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

Листинг 10.1.

В окне Solution Explorer дважды щелкаем на файл AssemblyInfo.cs и для использования атрибутов добавляем пространство имен

System.Security.Permissions:

using System.Reflection;

using System.Runtime.CompilerServices; using System.Security.Permissions;

В конце листинга AssemblyInfo.cs определяем минимальный набор разрешений:

// Запрос минимального набора разрешений

[assembly: UIPermission(SecurityAction.RequestOptional, Window = UIPermissionWindow.SafeTopLevelWindows)]

[assembly: PermissionSet(SecurityAction.RequestOptional, Name = "LocalIntranet")]

Это разрешение не было назначено политикой безопасности, поэтому генерируется исключение (рис. 10.5).

увеличить изображение

Рис. 10.5. Сгенерированное исключение при определении минимального набора разрешений

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

[assembly:PermissionSet(SecurityAction.RequestOptional, Unrestricted = false)]

На диске, прилагаемом к книге, вы найдете приложение Permissions (Code\Glava10\ Permissions).

Администрированиеполитики безопасности

С помощью утилиты Microsoft .NET Framework 1.1 Configuration можно настраивать политику безопасности на компьютере. Для ее запуска переходим в Мой компьютер\Панель управления\Администрирование\Microsoft .NET Framework 1.1 Configuration. Открываем вкладку Runtime Security Policy (рис. 10.6).

увеличить изображение

Рис. 10.6. Утилита Microsoft .NET Framework 1.1 Configuration

Окно программы разделено на две части. В левой мы можем выбирать нужный объект, в правой немедленно выводится панель информации с описанием этого объекта и ссылками на возможные действия. Для каждого уровня безопасности — Enterprise, Machine и User (описание см. в табл. 10.2) — имеется своя настройка трех категорий — Code Groups, Permission Sets и Policy Assemblies. Поскольку сами категории совершенно одинаковы для всех уровней, выберем один уровень — Machine — и рассмотрим настройку доступа. Переходим на вкладку Machine —> Code Groups —> All Code —> My_Computer_Zone. На панели описания мы видим описание данной группы кода и ее свойства — условия членства в группе и набор разрешений для данной группы (рис. 10.7).

увеличить изображение

Рис. 10.7. Свойства группы My_Computer_Zone

В этой группе кода определяется доступ на локальном компьютере, аналогично на вкладках LocalIntranet_Zone и Internet_Zone — доступ внутри локальной сети и в Интернете. Если настройка доступа для групп кода My_Computer_Zone и LocalIntranet_Zone представляет ограниченный интерес, то изменение свойств Internet_Zone требуется гораздо чаще — ведь большинство деструктивных действий, совершаемых без ведома пользователя, осуществляется через Интернет. Щелкнем правой кнопкой мыши на группе Internet_Zone и в появившемся контекстном меню выберем "Свойства". На вкладке Membership Condition по умолчанию определено условие членства в этой группе — зона Internet. В выпадающем списке Condition Type, представляющем различные возможные условия вступления в членство этой группы, выбираем условие Strong Name. Теперь нам следует указать открытый ключ, в дополнение к нему можно задать название и версию сборки (рис. 10.8).

Рис. 10.8. Условие вступления Strong Name в членство группы Internet_Zone

После введения необходимых данных переключаемся на вкладку Permission Set, где определяем набор разрешений для этой группы. После завершения редактирования и закрытия окна свойств изменения вступят в силу. Для создания собственного набора разрешений щелкаем правой кнопкой на вкладке Permission Sets и выбираем пункт меню New (рис. 10.9).

Рис. 10.9. Создание набора разрешений Permission Sets

В появившемся окне вводим имя нового набора разрешений и его описание (рис. 10.10).

Рис. 10.10. Создание нового набора разрешений В следующем окне выбираем набор из предлагаемого списка разрешений (рис. 10.11).

Рис. 10.11. Добавление разрешений к новому набору

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

Тестирование безопасностидоступакодаприложения. УтилитаCaspol.exe

Утилита командной строки caspol.exe, поставляемая с .NET Framework, позволяет просматривать и манипулировать политикой безопасности. Файл утилиты располагается в каталоге С\WINDOWS\Microsoft.NET\Framework\ v1.1.4322\ CasPol.exe.

Утилита caspol.exe отображает всю доступную информацию об уровне безопасности, установленном по умолчанию (Machine). Эта информация включает в себя иерархию групп кода, название набора разрешений и имена сборок, использующих политику Full Trust.

Утилита caspol.exe имеет следующий синтаксис:

caspol <параметры> <аргументы>

В таблице 10.5 приводится список некоторых параметров утилиты.

 

Таблица 10.5. Некоторые парметры утилиты caspol.exe

Параметр

Действие

Примечания

-l

Список (List)

Вывод всей доступной информации об уровне безопасности, установленном по умолчанию

-lg

Список групп кода (List

Вывод списка групп кода уровня безопасности, установленного по умолчанию

 

Group Code)

 

-lp

Список наборов

Вывод списка наборов разрешений

 

разрешений (List

 

 

Permission Set)

 

-ag

Добавление группы кода

Добавление новой группы кода в уровень безопасности

 

(Add Code Group)

 

-url

URL

Использование сборкой URL в качестве условия принадлежности к группе

-n

Название группы кода

Задание имени для новой группы кода

 

(Code Group Name)

 

-

Установка флага Exclusive

Используется для тестирования. Любая сборка, встретившая условие группы кода, получает

exclusive

для уровня безопасности

соответствующий набор разрешений. Например, это может применяться для предотвращения

 

 

автоматического назначения набора разрешений Full Trust

-cg

Поменять группу кода

Изменение существующей группы кода

 

(Change Code Group)

 

-rg

Удалить группу кода

Удаление существующей группы кода

 

(Remove Code Group)

 

Для работы с утилитой выбираем Пуск\Все программы\ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt и в запустившейся командной строке вводим

caspol.exe

Появляется справка утилиты, которую затем можно снова вывести одной из команд

caspol –help caspol -? caspol /?

Для вывода информации о группах кода и наборов разрешений вводим

caspol -l

Для получения списка групп кода вводим

caspol -lg

Для просмотра списка наборов разрешений вводим

caspol –lp

Для сброса всех пользовательских настроек вводим

caspol –reset

По умолчанию весь код, запускающийся на локальной машине, получает набор разрешений полного доступа Full Trust. Нам

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

Создаем папку C:\testpermissions, затем в командной строке создаем новую группу разрешений:

сaspol –ag 1 –url file:///C:/testfolder/

* Internet -n test_permissions_group –exclusive on

Этот код добавляет новую группу кода test_permissions_group, условием вступления в которую является запуск из папки testpermissions. После этого копируем приложение в папку testpermissions и запускаем его с набором разрешений Internet.

Изменяем набор разрешений на Execution командой

Caspol –cg Test_Group Execution

Удаляем тестовую группу командой

Caspol –rg Test_Group

Ролеваябезопасность

Ролевая модель безопасности использует данные пользователя в качестве источника информации. Как правило, эта информация состоит из имени и роли пользователя.

Ролевая модель безопасности в .NET Framework использует две концепции: личность (identity), представляющее собой имя пользователя, и его роль (principal).

.NET Framework позволяет разработчикам применять встроенный в Microsoft Windows набор ролей. Также вы можете задействовать и частный набор ролей.

Перед тем как использовать роль пользователя, нам необходимо проверить личность этого пользователя. Аутентификация — это обнаружение и проверка личности пользователя путем сравнения введенной пользователем информации с существующими данными. Например, при проверке электронной почты вы вводите имя пользователя и пароль. Сервер сверяет их со своими данными и, если они идентичны, открывает доступ к вашей почте.

Сегодня существует множество механизмов аутентификации пользователей. Некоторые из них могут использоваться в .NET Framework приложениях. В операционной системе Windows используется механизм Microsoft Passport.

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

Объект "личность"

Объекты "личность" и "роль" применяются для доступа к информации о пользователе. Мы можем использовать информацию об имени встроенной учетной записи в операционной системе Windows и роли этой учетной записи с помощью объектов WindowsIdentity и WindowsPrincipal. Для доступа к информации о пользователе, основанной на собственном механизме аутентификации, задействуются объекты GenericIdentity и GenericPrincipal.

Объект "личность" инкапсулирует такую информацию о пользователе, как имя и тип аутентификации. В библиотеке .NET Framework есть три типа объекта "личность" (таблица 10.6).

 

Таблица 10.6. Типы объекта личность .NET Framework

Личность

Описание

 

 

Windows

Представляет информацию о текущей учетной записи Windows. Windows Identity позволяет определять полномочия

Identity

пользователя в ОС и использовать их в приложении. Реализуется классом WindowsIdentity

Generic

Представляет информацию о пользователе, которая основана на частном механизме аутентификации, используемом

Identity

в приложении. Реализуется классом GenericIdentity

Custom

Представляет "личность", которая инкапсулирует частную информацию о пользователе. Реализуется классом, в

Identity

котором имеется интерфейс IIdentity

Все классы, описывающие "личность", должны реализовывать интерфейс IIdentity. Интерфейс IIdentity имеет три открытых свойства:

Name — имя пользователя.

IsAuthenticated — логическая переменна, принимающее одно из двух значений в зависимости от результата прохождения

пользователем аутентификации.

AuthenticationType — тип аутентификации пользователя.

Объект "роль"

"Роль" определяет право пользователей на выполнение действий, причем возможно наличие нескольких пользователей (входящих в группу) с различными именами, но равными ролями. Практически такая ситуация характерна для информационных систем — например, в банке права менеджера и оператора различаются, причем может быть несколько как менеджеров, так и операторов.

В библиотеке .NET Framework есть три типа объекта "роль" (таблица 10.7).

 

Таблица 10.7. Типы объекта роль .NET Framework

Роль

Описание

Windows

Представляет пользователей операционной системы Windows и их роли. Реализуется классом WindowsPrincipal

Principal

 

Generic Principal Представляет независимых от операционной системы пользователей и их роли. Реализуется классом

GenericPrincipal

Custom Principal Представляет специальную для приложения информацию о ролях. Реализуется классом, в котором имеется интерфейс IPrincipal

Все классы, описывающие объект "роль", должны реализовывать интерфейс IPrincipal. Интерфейс IPrincipal имеет одно свойство — Identity, которое описывает объект класса, реализующего интерфейс Iidentity, и метод — IsInRole, который определяет, принадлежит ли текущий "принципал" к заданной роли.

Использование объектовWindowsIdentity иWindowsPrincipal

Существует два способа создания объекта WindowsPrincipal. Разница между ними в том, что один способ проверяет введенную информацию один раз, а второй — постоянно.

Если однократной проверки роли достаточно, то создаем объект WindowsPrincipal следующим образом:

//Инициализируем объект класса WindowsIdentity

//с помощью статического метода WindowsIdentity.GetCurrent() WindowsIdentity identity = WindowsIdentity.GetCurrent();

//Создаем новый объект класса WindowsPrincipal

//и передаем в качестве параметра объект identity WindowsPrincipal principal = new WindowsPrincipal(identity);

Если же вам необходимо проверять роль пользователя постоянно, то лучше создать объект WindowsPrincipal следующим образом:

//Указываем домену приложения политику ролевой безопасности

//с помощью члена WindowsPrincipal перечисления PrincipalPolicy,

//переданного в статический метод AppDomain.CurrentDomain.

//SetPrincipalPolicy.

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

//После того как новая политика установлена, вы можете использовать

//объект из статического свойства CurrentPrincipal класса Thread. WindowsPrincipal principal = System.Threading.Thread.CurrentPrincipal as WindowsPrincipal;

Создайте новое консольное приложение и назовите его WindowsIdentityandPrincipal. Далее привожу листинг с комментариями:

using System;

//Подключаем пространства имен Threading и Principal using System.Threading;

using System.Security.Principal;

namespace WindowsIdentityandPrincipal

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

//Создаем и инициализируем объекты

//WindowsPrincipal и WindowsIdentity

WindowsIdentity identity = WindowsIdentity.GetCurrent();

WindowsPrincipal principal = new WindowsPrincipal(identity);

//Выводим информацию, содержащуюся в объекте класса WindowsPrincipal Output("Name", principal.Identity.Name);

Output("Type", principal.Identity.AuthenticationType); Output("Authenticated", principal.Identity.IsAuthenticated.ToString());

//Выводим информацию, содержащуюся в объекте класса WindowsIdentity Output("IdentName", identity.Name);

Output("IdentType", identity.AuthenticationType); Output("IdentIsAuthenticated", identity.IsAuthenticated.ToString()); Output("IsAnonymous", identity.IsAnonymous.ToString()); Output("IsGuest", identity.IsGuest.ToString());

Output("IsSystem", identity.IsSystem.ToString()); Output("Token", identity.Token.ToString());

}

//Метод Output выводит информацию на экран, причем myName — это название //параметра, а myValue — его значение.

public static void Output(string myName, string myValue)

{

Console.WriteLine(myName + "= {0}", myValue);

}

Листинг 10.2.

В результате выводится полный список значений WindowsIdentity и WindowsPrincipal на данном компьютере (рис. 10.12).

Рис. 10.12. Результат приложения WindowsIdentityandPrincipal

На диске, прилагаемом к книге, вы найдете приложение WindowsIdentityandPrincipal (Code\Glava10\ WindowsIdentityandPrincipal)

.

Использование объектовGenericIdentity иGenericPrincipal

Классы GenericPrincipal совместно с классом GenericIdentity применяются для реализации ролевой безопасности, не зависящей

от системы безопасности Windows. Например, у пользователя запрашиваются имя и пароль, которые затем сверяются с данными, хранящимися в приложении или локальной базе данных, и, после успешной проверки, создаются объекты GenericPrincipal и

GenericIdentity на основании введенных значений.

Для реализации ролевой безопасности на основе объектов классов GenericPrincipal и GenericIdentity необходимо выполнить следующие действия:

создать новый объект класса GenericIdentity и инициализировать его именем пользователя;

создать новый объект класса GenericPrincipal и инициализировать его только что созданным объектом класса

nericIdentity и строковым массивом, содержащим роли пользователя;

прикрепить созданный объект класса GenericPrincipal к текущему потоку. Прикрепление к текущему потоку необходимо для осуществления последующей проверки полномочий пользователя в коде приложения.

Синтаксис этих действий следующий:

//Создаем и инициализируем именем пользователя

//объект класса GenericIdentity

GenericIdentity identity = new GenericIdentity("Username"); // Создаем строковый массив, содержащий роли пользователя.

string[] userRoles = new string[]{"Administrator", "PowerUser", "GuestUser"};

//Создаем объект класса GenericPrincipal и инициализируем его

//объектом класса GenericIdentity identity и строковым массивом с

//ролями.

GenericPrincipal principal = new GenericPrincipal(identity, userRoles);

//Прикрепляем объект роли к текущему процессу.

//Этот и все дочерние процессы будут иметь данную роль. Thread.CurrentPrincipal = principal;

Создайте новое консольное приложение и назовите его GenericIdentityandPrincipal . Далее привожу листинг с комментариями:

using System;

using System.Threading;

using System.Security.Principal;

namespace GenericIdentityandPrincipal

{

///<summary>

///Summary description for Class1.

///</summary>

class Class1

{

[STAThread]

static void Main(string[] args)

{

//Создаем и прикрепляем объект роли. CreateGenericPrincipalAndIdentity(Roles.PowerUser);

//Вводим один из способов осуществления проверки роли. if(Thread.CurrentPrincipal.IsInRole("User"))

{

Console.WriteLine("У вас нет прав для работы с этим приложением");

}

else if(Thread.CurrentPrincipal.IsInRole("PowerUser"))

{

Console.WriteLine("Добро пожаловать, {0}. Ваша роль — Продвинутый пользователь",

Thread.CurrentPrincipal.Identity.Name);

}

else // Administrator

{

Console.WriteLine("Добро пожаловать, {0}. Ваша роль — Администратор", Thread.CurrentPrincipal.Identity.Name);

}

}

// Создание объектов личности и роли

static void CreateGenericPrincipalAndIdentity(Roles role)

{

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]