на начало
На главную страницу
Форум   

Статья :: Разрешение принципала


Разрешение принципала

Безопасность на основе ролей управляется классом PrincipalPermission. Пример под тем же названием проверяет с помощью этого класса, что личность пользователя, под которой запускается программа, — это Administrator (Администратор). Мы это делаем, передавая конструктору имя личности и строку, представляющую роль. И снова для разрешения мы применяем метод Demand (Требование), чтобы проверить законность запроса на разрешение.

// Требовать, чтобы код выполнял Администратор
PrincipalPermission *pperm = new PrincipalPermission(
wi->Name, adminRole); // Имя try
{
pperm->Demand(); Console::WriteLine(
"Code demand for an administrator succeeded."); // "Запрос кода для Администратора успешный."
}
catch(SecurityException *)
{
Console::WriteLine(
"Demand for Administrator failed."); // "Запрос для Администратора потерпел неудачу."
}

Если программу запустил администратор, то требование успешно удовлетворяется. В противном случае оно не удовлетворяется и запускается исключение. Затем код проверяет, является ли именем пользователя JaneAdmin (это имя не системного администратора, и оно всего лишь входит в группу Customer Admin), и что указанная роль выполняет программу.

String *customerAdminRole = // Строка "HPDESKTOP\\CustomerAdmin";
PrincipalPermission *pp;
pp = new PrincipalPermission(
"HPDESKTOP\\JaneAdmin", customerAdminRole);
try
{
pp->Demand(); Console::WriteLine(
"Demand for Customer Administrator succeeded.");
// "Запрос для Администратора клиентов успешный."
}
catch(SecurityException *)
{
Console::WriteLine(
"Demand for Customer Administrator failed.");
// "Запрос для Администратора клиентов потерпел неудачу."
}

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

String *idl = "HPDESKTOP\\Administrator"; // Администратор String *id2 = "HPDESKTOP\\PeterT"; // Строка
PrincipalPermission *ppl =
new PrincipalPermission(idl, adminRole); PrincipalPermission *pp2 =
new PrincipalPermission(id2, adminRole);
IPermission *ipermission = pp2->Union(ppl); // Объединение - try {
ipermission->Demand() ; Console: :WriteLine(
"Demand for either administrator succeeded."); // "Запрос для любого из администраторов успешный." }
catch(SecurityException *) {
Console::WriteLine (
"Demand for either administrator failed.");
// "Запрос для любого из администраторов потерпел неудачу."
}

Затем код смотрит, запущен ли он личностью любого из администраторов.

Principal-Permission *pp3 =
new PrincipalPermission(0, adminRole);
try
{
pp3->Demand(); Console::WriteLine(
"Demand for any administrator succeeded.");
// "Запрос для любого администратора успешный."
}
catch(SecurityException *)
{
Console::WriteLine(
"Demand for any administrator failed.");
// "Запрос для любого администратора потерпел неудачу."
}

Когда пользователи не аутентифицированы, то даже если они действительно принадлежат соответствующим ролям, выполнение Demand (Требование) все равно будет неудачным.


Разрешение принципала

страницы в данном разделе 
Глава 13. Защита Защита
Защита на основе пользователей Защита доступа к коду
Политика безопасности Разрешения
lnternet-безопасность Информационный сервер Internet: Internet Information Server (MS)
Защита .NET на основе ролей Принципалы и личности
Роли .NET в Windows Другие классы личностей
Личность в операционной системе и общеязыковой среде выполнения CLR Разрешения коду на доступ
Простой запрос разрешения кодом Как работает запрос на разрешение
Стратегия запроса разрешений Запрет разрешений
Утверждение разрешений Другие методы разрешений
Класс SecurityPermission Неуправляемый код
Разрешения на основе атрибутов Разрешение принципала
Класс PermissionSet Личность кода
Классы разрешений для личности Подтверждение
Политика безопасности Уровни политики безопасности
Кодовые группы Именованные наборы разрешений
Изменение политики безопасности Резюме


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста