Создание Windows-приложений на основе Visual C#



Контроль доступа приложения


После создания объекта роли к нему можно добавить код для реализации контроля доступа, основанного на ролях пользователей. Рассмотрим пример, в котором осуществляется контроль доступа по имени пользователя, причем сравнение строк не чувствительно к регистру. Создайте новое консольное приложение и назовите его AccessControl. Далее привожу листинг с комментариями:

using System; using System.Threading; using System.Security.Principal;

namespace AccessControl { class Class1 { [STAThread] static void Main(string[] args) { GenericIdentity identity = new GenericIdentity("MANAGER"); string[] userRoles = new string[]{"Administrator"}; GenericPrincipal principal = new GenericPrincipal(identity, userRoles); Thread.CurrentPrincipal = principal;

ValidateUserName(); ValidateRole(); } //Проверяем пользователя по личности static void ValidateUserName() { if (String.Compare(Thread.CurrentPrincipal.Identity.Name, "manager", true) == 0) { Console.WriteLine("Добро пожаловать, пользователь Manager"); } else { throw new System.Security.SecurityException("У вас нет прав для выполнения текущей операции"); } } //Проверяем пользователя по роли static void ValidateRole() { if (Thread.CurrentPrincipal.IsInRole("Administrator")) { Console.WriteLine("Добро пожаловать, пользователь Manager"); } else { throw new System.Security.SecurityException("У вас нет прав для выполнения текущей операции"); } } } }

Листинг 10.4.

При запуске этого приложения дважды осуществляется авторизация – по имени пользователя (личности) и его роли (рис. 10.14):

Результат работы приложения AccessControl

Рис. 10.14.  Результат работы приложения AccessControl

Для объектов класса WindowsIdentity имя пользователя представлено в виде имени пользователя и домена. Например, если бы приведенный выше пример использовал объект класса WindowsIdentity, то имя для сравнения было бы следующим: DOMAIN\Manager.

Для объектов класса WindowsPrincipal роль включает в себя и имя домена. Ниже представлен пример проверки роль объектом класса WindowsPrincipal:

if(WindowsPrincipalObj.IsInRole("DOMAIN\\ Manager ")) // Разрешить действие

Если учесть, что ваше приложение может кочевать по сети в поисках нового пользователя, то строго прописывать имя домена не рекомендуется. Вместо этого для проверки ролей пользователей объектом класса WindowsPrincipal нужно указывать не строку с названием роли, а член перечисления WindowsBuiltInRole, как показано ниже:

MyPrincipal.IsInRole(WindowsBuiltInRole. Manager);

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




Содержание  Назад  Вперед