Форма 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" соответственно.
Устанавливаем следующие свойства формы:
Text | Authorization |
AcceptButton | btnOK |
CancelButton | btnCancel |
Добавляем в класс формы 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" соответственно.
Устанавливаем следующие свойства формы:
Text | Authorization |
AcceptButton | btnOK |
CancelButton | btnCancel |
Добавляем в класс формы 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.