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

         

Форма frmAuthorization — форма авторизации пользователей


При запуске программы пользователь вводит свой логин в домене и пароль (см. рис. 11.1). К примеру, мы рассматриваем домен SomeDomain. Пользователь вводит свою учетную запись в домене, например SomeDomain\someUser, и пароль. Далее проверяется принадлежность пользователя группам Administrators, Managers, Recipients. Эти группы пользователей должны быть предварительно созданы администратором, в противном случае пользователь будет иметь группу FailGroup и не сможет запустить программу. Если пользователь авторизован, то, в зависимости от принадлежности к группе, интерфейс программы будет выглядеть по-разному, т.е. какие-то функции доступны, а какие-то — нет.

Приступим к созданию этой формы. Помещаем на форму из панели ToolBox следующие элементы управления:

  • Два элемента TextBox: txtUserName и txtPassword и две надписи Label со свойствами Text "User name:" и "Password:" соответственно. Для элементов TextBox создаем обработчики события TextChanged (см. код программы).
  • Добавляем на форму две кнопки btnOK и btnCancel со свойствами Text "OK" и "Cancel" соответственно. Для них создаем обработчиков события Click (см. код программы). Также устанавливаем свойства DialogResult для этих кнопок "OK" и "Cancel" соответственно.

Устанавливаем следующие свойства формы:

frmAuthorization, СвойствоЗначение
TextAuthorization
AcceptButtonbtnOK
CancelButtonbtnCancel

Добавляем в класс формы frmAuthorization следующие методы:

Сигнатура методовОписание методов
private void OpenMainForm(UserGroup userGroup, Label label)Открытие главной формы для пользователя с данной группой прав
private void CheckLogin()Авторизация пользователя
private void InitialDefaultSettings()Настройки по умолчанию
private void CheckTextBoxes()Проверка полей ввода

Создаем обработчик события Activate для формы (см. код программы).

Также в класс формы добавим перечисление с константами групп пользователей:

internal enum UserGroup { Administrators, Managers, Recipients, FailGroup }


При запуске программы пользователь вводит свой логин в домене и пароль (см. рис. 11.1). К примеру, мы рассматриваем домен SomeDomain. Пользователь вводит свою учетную запись в домене, например SomeDomain\someUser, и пароль. Далее проверяется принадлежность пользователя группам Administrators, Managers, Recipients. Эти группы пользователей должны быть предварительно созданы администратором, в противном случае пользователь будет иметь группу FailGroup и не сможет запустить программу. Если пользователь авторизован, то, в зависимости от принадлежности к группе, интерфейс программы будет выглядеть по-разному, т.е. какие-то функции доступны, а какие-то — нет.

Приступим к созданию этой формы. Помещаем на форму из панели ToolBox следующие элементы управления:

  • Два элемента TextBox: txtUserName и txtPassword и две надписи Label со свойствами Text "User name:" и "Password:" соответственно. Для элементов TextBox создаем обработчики события TextChanged (см. код программы).
  • Добавляем на форму две кнопки btnOK и btnCancel со свойствами Text "OK" и "Cancel" соответственно. Для них создаем обработчиков события Click (см. код программы). Также устанавливаем свойства DialogResult для этих кнопок "OK" и "Cancel" соответственно.

Устанавливаем следующие свойства формы:

frmAuthorization, СвойствоЗначение
TextAuthorization
AcceptButtonbtnOK
CancelButtonbtnCancel

Добавляем в класс формы frmAuthorization следующие методы:

Сигнатура методовОписание методов
private void OpenMainForm(UserGroup userGroup, Label label)Открытие главной формы для пользователя с данной группой прав
private void CheckLogin()Авторизация пользователя
private void InitialDefaultSettings()Настройки по умолчанию
private void CheckTextBoxes()Проверка полей ввода

Создаем обработчик события Activate для формы (см. код программы).

Также в класс формы добавим перечисление с константами групп пользователей:

internal enum UserGroup { Administrators, Managers, Recipients, FailGroup }




Листинг формы frmAuthorization:

Листинг 11.3.

(html, txt)




Листинг формы frmAuthorization:

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Security.Principal; using System.Windows.Forms; using System.DirectoryServices; using System.Management; using Manager.Schemas; using Manager.Forms; using System.Globalization; using System.Security.Permissions; using System.Threading;

namespace Manager { public class frmAuthorization : System.Windows.Forms.Form { // Объявление элементов управления.

internal enum UserGroup { Administrators, Managers, Recipients, FailGroup }

public frmAuthorization() { InitializeComponent(); this.InitialDefaultSettings(); }

// Открытие главной формы для пользователя с определенной группой доступа. private void OpenMainForm(UserGroup userGroup, Label label) { frmManager mainForm = new frmManager();

mainForm.userGroup = userGroup; switch (userGroup) { case UserGroup.Administrators: mainForm.panel12.Visible = true; mainForm.gbPaymentDB.Visible = true; mainForm.tbMain.Buttons[3].Visible = true; mainForm.rbDataMain.Visible = true; mainForm.rbIncomeMain.Visible = true; mainForm.rbOutMain.Visible = true; mainForm.dgWorkTable.ReadOnly = false; mainForm.tcManager.SelectedTab = mainForm.tcManager.TabPages[1]; mainForm.mnuSecurity.Visible = false; mainForm.btnShowPaymentTypeForm.Visible = true; break;

case UserGroup.Managers: mainForm.panel12.Visible = false; mainForm.panel16.Dock = DockStyle.Fill; mainForm.panel18.Visible = false; mainForm.gbPaymentDB.Visible = false; mainForm.tbMain.Buttons[3].Visible = false; mainForm.rbDataMain.Visible = false; mainForm.dgOut.Visible = false; mainForm.splitter2.Visible = false; mainForm.rbIncomeMain.Visible = true; mainForm.rbOutMain.Visible = false; mainForm.dgWorkTable.ReadOnly = false; mainForm.tcManager.SelectedTab = mainForm.tcManager.TabPages[0]; mainForm.mnuSecurity.Visible = false; mainForm.btnShowPaymentTypeForm.Visible = false; break;

case UserGroup.Recipients: mainForm.panel12.Visible = false; mainForm.panel16.Dock = DockStyle.Fill; mainForm.panel18.Visible = false; mainForm.gbPaymentDB.Visible = false; mainForm.tbMain.Buttons[3].Visible = false; mainForm.rbDataMain.Visible = false; mainForm.dgOut.Visible = false; mainForm.splitter2.Visible = false; mainForm.rbIncomeMain.Visible = false; mainForm.rbOutMain.Visible = false; mainForm.dgWorkTable.ReadOnly = false; mainForm.tcManager.SelectedTab = mainForm.tcManager.TabPages[0]; mainForm.gbBaseTables.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; mainForm.mnuSecurity.Visible = false; mainForm.btnShowPaymentTypeForm.Visible = false; break;



case UserGroup.FailGroup: MessageBox.Show(" Вы не имеете полномочий запускать данное приложение.\n\n" + "Чтобы запустить, приложение вам необходимо принадлежать группам:\n" + "Administrators, Managers или Recipients.\n\n" + "Проверьте учетную запись или обратитесь к администратору.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Environment.Exit(1); break; }

label.Text = "Loading database ..."; mainForm.LoadMainDataBase();

label.Text = "Checking data ..."; mainForm.PasteDateRow();

label.Text = "Loading ..."; mainForm.FillPaymentsPage(); mainForm.Explorer(); mainForm.Show(); mainForm.CheckEmployeesBirthDays();

label.Text = "Ready"; }

// Проверка имени и пароля private void CheckLogin() { try { frmHeadBand headBand = new frmHeadBand(); headBand.Show(); headBand.Cursor = Cursors.WaitCursor; headBand.label1.Text = "Checking...";

this.Visible = false; UserGroup userGroup = UserGroup.FailGroup; DirectoryEntry de=new DirectoryEntry();

try { de.Path = "LDAP:// "; de.Username = txtUserName.Text; de.Password = txtPassword.Text;

// Если была неверно введена учетная запись, //тогда инструкция if сгенерирует исключение //System.Runtime.InteropServices.COMException if(de.NativeObject == null) MessageBox.Show("Failed"); } catch(System.Runtime.InteropServices.COMException) { headBand.Dispose(); MessageBox.Show("Неверное имя пользователя или пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

System.Environment.Exit(1); }

WindowsIdentity wi = WindowsIdentity.GetCurrent(); WindowsPrincipal wp = new WindowsPrincipal(wi); if (wi.Name.ToLower() != de.Username.ToLower()) { headBand.Dispose(); MessageBox.Show("Вы не имеете полномочий запускать данное приложение.\n\n" + "Проверьте, что ваша учетная запись совпадает с текущей учетной записью.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);



System.Environment.Exit(1); }

// Авторизация пользователя if (wp.IsInRole(@"SomeDomain\Administrators")) // Administrators userGroup = UserGroup.Administrators;

else if (wp.IsInRole(@"SomeDomain \Managers")) // Managers userGroup = UserGroup.Managers;

else if (wp.IsInRole(@"SomeDomain \Recipients")) // Recipients userGroup = UserGroup.Recipients;

this.OpenMainForm(userGroup, headBand.label1);

headBand.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.Message, ex.Source); System.Environment.Exit(1); } }

// Настройки по умолчанию private void InitialDefaultSettings() { this.MinimumSize = this.Size; this.MaximumSize = this.Size; this.StartPosition = FormStartPosition.CenterScreen; this.txtUserName.TextChanged += new EventHandler(txtUserName_TextChanged); this.txtPassword.TextChanged += new EventHandler(txtPassword_TextChanged); this.btnOK.Click += new EventHandler(btnOK_Click); this.btnCancel.Click += new EventHandler(btnCancel_Click); this.Activated += new EventHandler(frmAuthorization_Activated); }

protected override void Dispose( bool disposing ) { // Описание метода }

private static void Main() { Application.Run(new frmAuthorization()); }

private void InitializeComponent() { // Описание метода } #endregion

private void btnCancel_Click(object sender, EventArgs e) { this.Close(); }

private void CheckTextBoxes() { if ((txtPassword.Text != "") && (txtUserName.Text != "")) btnOK.Enabled = true; else btnOK.Enabled = false; }

private void txtUserName_TextChanged(object sender, EventArgs e) { this.CheckTextBoxes(); }

private void txtPassword_TextChanged(object sender, EventArgs e) { this.CheckTextBoxes(); }

private void btnOK_Click(object sender, EventArgs e) { this.CheckLogin(); }

private void frmAuthorization_Activated(object sender, EventArgs e) { WindowsIdentity t = WindowsIdentity.GetCurrent(); this.txtUserName.Text=t.Name.ToString(); this.txtPassword.Focus(); } } }

Листинг 11.3.


Содержание раздела