Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна_проект.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Створення системи авторизації

Створення провайдера ролей

Насамперед створимо систему авторизації. Отже, у нас в додатку будуть визначені 4 типи користувачів: адміністратор, модератор, виконавець і звичайний користувач.

Адміністратор буде керувати системою користувачів і додавати різні дані в довідники обладнання, загалом, буде нести стандартні управлінські функції.

Модератор призначатиме заявкам користувачів виконавців, які потім будуть вирішувати дану проблему.

Виконавець буде певним чином вирішувати виниклу задачу і потім оновлювати статус цього завдання. При завершенні виконання виконавець закриває задачу.

І звичайні користувачі просто формують заявки по виниклих у них проблемах.

Поділ на дані типи досить умовно, можна зробити менше, можна, навпаки, додати додаткові типи.

Кожен тип користувачів буде володіти певними обмеженнями. Так, нам треба зробити, щоб створювати і видаляти користувачів міг тільки адміністратор, але ніяк не модератор, не кажучи вже про звичайних користувачів.

Також, наприклад, нам треба, щоб тільки модератор міг призначати виконавців за заявками, а не самі виконавці. Ну і інші моменти, які ми згодом застосуємо у додатку.

Отже, додамо в проект папку Providers, в яку потім ми додамо класи провайдерів користувачів і ролей. Додамо в неї клас провайдера ролей:

Щоб реалізувати свій провайдер ролей, нам треба наслідувати клас від RoleProvider. У даному випадку ми перевизначаємо два методи базового класу: GetRolesForUser, який повертає всі ролі користувача, і IsUserInRole, який показує, чи пов'язаний користувач з даною роллю.

Тепер підключимо наш провайдер ролей до проекту у файлі web.config в секції system.web. За замовчуванням там вже є визначення провайдера ролей:

<roleManager defaultProvider="DefaultRoleProvider">

<providers>

<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />

</providers>

</roleManager>

Змінимо його на наступне:

<roleManager enabled="true" defaultProvider="HelpdeskRoleProvider">

<providers>

<add name="HelpdeskRoleProvider" type="AppUsersProblem.Providers.HelpdeskRoleProvider" />

</providers >

</roleManager >

Можливо, у великих додатках вам буде потрібно ще перевизначати або використовувати вбудовані постачальники членства і профілів (наприклад, SimpleMembershipProvider), але для даної задачі нам вистачить і постачальника ролей. А перевантажувати систему надлишковими класами не має сенсу.

Тепер перейдемо до самої логіки авторизації.

Створення контролера AccountController

При вході користувача на сайт його робота буде починатися з авторизації, і перше що користувач побачить - це сторінка авторизації. А за всю логіку авторизації відповідатиме контролер AccountController. Тому додамо в проект в папку Controllers клас AccountController:

Оскільки звертатися до контролера може будь хто, то для нього встановимо атрибут [AllowAnonymous], який відкриває анонімний доступ.

У контролері визначено дію Login, яка авторизує користувача. GET - варіант методу видає сторінку авторизації. А POST- версія обробляє введені дані і, залежно від того, чи був знайдений в базі даних користувач з подібними логіном і паролем, авторизує його, встановлюючи відповідні куки.

На метод RedirectToAction("Index", "Request"); поки можна не звертати уваги. Трохи пізніше ми визначимо контролер RequestContoller, на який в даному випадку буде йти на переадресацію.

Метод Login використовує допоміжний метод ValidateUser, який служить для валідації користувача. У разі, якщо б у нас використовувався провайдер членства, то ми б у ньому визначили цей метод. А в даному випадку ми визначаємо його в контролері.

Також, для спрощення роботи з даними в методі Login використовується модель LogViewModel, яка і буде передавати в контролер введені користувачем дані. Додамо клас цієї моделі в папку Models:

Cкомпілюємо проект за допомогою функції Build, щоб нам стали доступними всі створені моделі. Тепер додамо в проект перше представлення, яке буде призначене для авторизації. Це буде строго типізоване представлення - типізоване воно буде моделлю LogViewModel. Отже, додамо в проект представлення Login:

Для полегшення роботи використовуємо в налаштуваннях шаблон Create, який нам створить шаблонне представлення. А майстер- сторінка layout в даному випадку використовуватися не буде.

Трохи змінимо стандартне представлення наступним чином:

І врешті ми можемо протестувати представлення, запустивши проект. Звернемося до ресурсу в адресному рядку браузера, набравши localhost : номер_порту /Account/Login: