Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Модель защиты, основанная на ролях
8 февраля 2009

Система безопасности, основанная на ролях, предоставляет доступ к приложению
(ресурсам) или отказывает в нем в зависимости от того, кем является пользователь
и какова его роль в организации. Давайте рассмотрим приложение, которым пользу-
ются менеджеры и рядовые сотрудники. В нем основная функциональность дос-
тупна любым пользователям, а доступ к конфиденциальным данным, таким, как
платежные ведомости и персональная информация, — только менеджерам. Подоб-
ная система безопасности может быть реализована на основе ролей.
Примечание Все примеры кода из раздела, посвященного защите, основанной на
ролях, предполагают наличие оператора Imports System.Security. Principal (Visual Basic
.NET) или using System.Security.Principal (Visual C#).
Объект Principal
Объект Principal представляет в .NET Framework аутентифицированного полыова-
теля. Этот объект содержит имя пользователя и его роль. Его можно сравнивать с
объектом класса PrincipalPermission, который применяется для зашиты конфиден-
циальных ресурсов приложения от несанкционированного доступа.
В Windows-приложениях для проверки имени и роли пользователя применяют-
ся встроенные защитные механизмы Windows. Для этого нужно связать представ-
ляющий текущего пользователя объект WindowsPrincipal с приложением, установив
политику участника безопасности (security principal) для текущего домена приложе-
ния, как показано ниже:
Visual Basic .NET
AppDorrain.CurrentDornain.SetPrincipalPolicy
(PrincipalPolicy.WindowsPrincipal}
Visual C#
// Этот пример предполагает наличие оператора using System.Security.Principal,
AppDomain.CurrentDornain.SetPrincipalPolicy
(PrincipalPolicy.WindowsPrincipal);
Объект WindowsPrincipal обладает ссылкой на объект Windowsldentity, представ-
ляющий текущего пользователя. Чтобы извлечь сведения о текущем пользователе,
получите объект Windowsldentity через свойство Identity текущего объекта Windows-
Principal. Объект WindowsPrincipal возвращает значение свойства Identity в виде ин-
терфейса Hdentity, поэтому его следует явно привести к типу Windowsldentity.
Visual Basic .NET
' Этот пример предполагает, что политика участника безопасности
' установлена как WindowsPrincipal.
Dim myPrincipal As WindowsPrincipal
1 Получить ссылку на текущий объект WindowsPrincipal.
rnyPrincipal = CType(Threading.Thread.CurrentPrincipal, _
WindowsPrincipal)
Dim myldentity As Windowsldentity
' Получить объект Windowsldentity для текущего участника безопасности,
myldentity = CType(myPrincipal.Identity, Windowsldentity)
1 Показать имя текущего пользователя.
MessageBox.Show(myldentity.Name)
Visual C#
// Этот пример предполагает, что политика участника безопасности
// установлена как WindowsPrincipal.
WindowsPrincipal myPrincipal;
// Получить ссылку на текущий объект WindowsPrincipal.
myPrincipal - (WindowsPrincipal)
System.Threading.Thread.CurrentPrincipal;
Windowsldentity myldentity;
// Получить объект Windowsldentity для текущего участника безопасности,
myldentity ~ (WindowsIdentity)myPrincipal.Identity;
// Показать имя текущего пользователя,
MessageBox.Show(myldentity. Name);
Императивная защита, основанная на ролях
Класс Principal Permission также применяют для реализации императивной защиты.
Объект Principal Permission представляет имя пользователя и его роль. Для успешной
проверки прав доступа имя и роль текущего пользователя должны соответствовать
удостоверениям, заданным объектом Principal Permission. Метод Demand объекта
Principal Permission сравнивает заданные этим объектом имя и роль с аналогичными
параметрами текущего объекта Principal. Следующий пример демонстрирует созда-
ние объекта PrincipalPermission и применение его для проверки текущего пользова-
теля:
Visual Basic .NET
Конструктор класса PrincipalPermission принимает
в качестве параметров имя и роль пользователя.
Dim myPermission As New PrincipalPermission("Megan", "Manager")
Проверить, определяет ли текущий объект Principal имя "Megan"
и роль "manager".
myPermission.Demand{)
Visual C#
// Конструктор класса PrincipalPermission принимает
// в качестве параметров имя и роль пользователя,
PrincipalPermission myPermission = new PrincipalPermission("Megan",
"Manager");
// Проверить, определяет ли текущий объект Principal имя "Megan"
// и роль "manager".
myPerfnission. Demand();
Метод Union класса PrincipalPermission применяют для создания разрешения, пре-
доставляющего все права, которые предоставляют два разрешения-аргумента этого
метода. Вот как его вызывают:
Visual Basic .NET
Dim Permissionl As New PrincipalPermission("Megan", "Manager")
Dim Permission2 As New PrincipalPermission("Ann", "Group Manager")
Dim Permissions As PrincipalPermission
Объединить разрешения Permission"! и Permission?.
Permissions = Permission2.Union(Perrnission1}
Для доступа к этому коду текущий объект Principal
должен представлять пользователя с именем Ann из группы Manager
либо пользователя Megan из той же группы.
Permissions.Demand()
Visual C#
PrincipalPermission Permission! - new PrincipalPermission("Megan", "Manage-"");
PrincipalPermission Permission2 - new PnncipalPermission("Ann", "Group Manager");
PrincipalPermission Permissions;
// Объединить разрешения Permission"! и Permission2,
Permissions = (PrincipalPermission)Permission2. Union(Permission"!);
// Для доступа к этому коду текущий объект Principal
// должен представлять пользователя с именем Ann из группы Manager
// либо пользователя Megan из той же группы,
Permissions, DemandO;
Если при создании объекта PrincipalPermission передать Nothing (null) вместо име-
ни или роли, создается разрешение, проверяющее соответственно только имя либо
только роль. Следующий код создает объект PrincipalPermission, который проверяет
только роль текущего объекта Principal:
Visual Basic .NET
' Создать разрешение, прозеряющее только принадлежность
' текущего пользователя к менеджерам.
Dim rnyPermission As New PrincipalPermission(Nothing. "Manager")
Visual C#
// Создать разрешение, проверяющее только принадлежность
// текущего пользователя к менеджерам.
PrincipalPermission myPermission - new
PrincipalPermission(null, "Manager");
Метод Intersect позволяет создать новое разрешение, которое предоставляет толь-
ко права, обшие для двух заданных разрешений:
Visual Basic .NET
Dim Permission! As New PrincipalPermissionfNothing, "Manager")
Dim Permission2 As New PrincipalPermission("Megan", Nothing)
Dim Permissions As PrincipalPermission
Создать новое разрешение, предоставляющее только те права, которые
' являются общими для разрешений Permission! и Permissions.
Permissions = Permission2.Intersect(Permissionl)
' Объект Principal, претендующий на доступ к этому коду, должен
1 представлять пользователя с именем Megan и ролью Manager.
Permissions. DemandO
Visual C#
PrincipalPermission Permission"! = new PrincipalPermission(null, "Manager");
PrincipalPerrnission Permission^ = new PrincipalPermission("Megan", null);
PrincipalPermission Permissions;
// Создать новое разрешение, предоставляющее только те права, которые
// являются общими для разрешений Permission! и Permission?,
Permissions = (PrincipalPermission)Permission2.Intersect(Permission1);
// Объект Principal, претендующим на доступ к этому коду, должен
// представлять пользователя с именем Megan и ролью Manager.
Permissions. DemandO;
Объекты Principal Permissions можно применять для проверки принадлежности к
встроенным ролям Windows, таким, как Administrators. Встроенные роли необходи-
мо задавать с префиксом BUILTIN\, как в следующем примере:
Visual Basic .NET
Dim myPermission as New PrincipalPermission("Rob",
"BUILTIN\Administrators")
Visual C#
// В программах на Ctt следует указывать двойной обратный слэш (\\),
// поскольку символ "\" задает escape-коды.
PrincipalPerrnission myPermission - new
PrincipalPermission("Rob", "BUILTIN\\Administrators");

Теги: .NET

Статьи по теме:

Свойства по умолчанию и индексаторы
Cosmos – C# Open Source Managed Operating System
Применение типов .NET Framework в приложениях
Классы CTS
Динамические свойства
Создание обработчиков событий элементов управления
Установка приложения
Команды для манипулирования данными
Извлечение типизированных данных с помощью объекта DataReader
Принципы дизайна интерфейса
Модификаторы доступа к членам
Blend PDF with Silverlight
Отображение текста
Извлечение из сопутствующих сборок ресурсов, специфичных для культуры
Реализация членов интерфейса на Visual Basic .NET
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Модель защиты, основанная на ролях. Регион сайта: Москва и Санкт-Петербург