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

Керування користувачами. UserController

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

Щоб користувачі могли авторизуватися, їх необхідно спочатку внести в базу даних. Тому насамперед треба створити загальний інтерфейс для керування користувачами і їх інформацією. Сюди входить реєстрація нових користувачів, зміна інформації про них, видалення і т.д. Причому повний доступ до керування буде мати тільки адміністратор, а модератори і виконавці зможуть тільки переглядати загальні відомості про користувачів.

Отже, додамо в папку Controllers новий контролер UserController, який буде для початку мати такий зміст:

Далі ми додамо інші методи, для яких буде встановлено різний доступ за ролями, тому ми вказуємо атрибут Authorize не на рівні контролера, а на рівні окремих дій. Оскільки переглядати користувачів можуть всі ролі крім ролі 'Користувач', то всі ці ролі ми і вказуємо в атрибуті.

Використовуючи метод Include ( u => u.Department ), ми додаємо до визначення користувачів і інформацію про пов'язані з ними відділів.

Тепер додамо представлення. Це буде строго типізоване представлення Index.cshtml, що використовує майстер- сторінку за замовчуванням, яке буде виводити всіх користувачів:

Оскільки передбачається, що тільки адмін може бачити логіни і паролі користувачів, то пишемо перевірку на статус користувача: @if (HttpContext.Current.User.IsInRole( "Адміністратор" )) . І якщо це адмін, то йому будуть відображені ці поля, інакше ж він їх не побачить.

Те ж саме по відношенню до посилань "Редагувати" і "Видалити". Так як тільки адміністратор може виконувати такі функції, то вони будуть доступні тільки для нього. Потім ми ще встановимо відповідні фільтри авторизації для цих дій.

Також зверніть увагу на ще один момент: оскільки в контролері ми використовували метод Include для приєднання пов'язаних даних з іншої таблиці, то в представленні ми можемо отримати ці дані, наприклад, item.Department.Name

Якщо на етапі створення БД додали першого користувача - адміністратора, то можна увійти в систему під цим користувачем і переглянути список користувачів (де поки один користувач) ( http://localhost:номер_порта/user).

Створення користувачів

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

Оскільки створення користувачів-прерогатива адміністратора, то встановлюємо відповідне обмеження з доступу. При створенні користувача адміністратор буде вибирати для них роль і департамент. Але оскільки ці дані самі по собі не з'являться в представленні, ми їх передаємо в нього через об'єкти типу SelectList. Конструктор цього об'єкта в якості першого параметра приймає вихідний набір, другим параметром йде значення, а третій відображається мітка для даного значення (наприклад, SelectList roles = new SelectList (db.Roles, "Id", " Name");). Тобто в списку ми будемо бачити значення вла-стивостей Name, але при виборі фактично будуть вибиратися значення властивостей Id.

Ну і при вдалому створенні нового користувача адміністратор перенаправлятиметься на сторінку зі списком всіх користувачів: RedirectToAction ("Index")

Створимо представлення Create.cshtml для цього методу:

Знову ж можемо протестувати і створити будь-якого користувача:

Редагування та видалення користувачів

І, нарешті, додамо функцію видалення та редагування користувачів. Додамо в контролер UserController наступні методи:

Обидві дії також доступні тільки адміністратору. При передачі ролей в представлення ми передаємо в якості четвертого параметра в конструктор SelectList поточне значення даної властивості об'єкта User: new SelectList ( db.Roles , "Id" , "Name" , user.RoleId) .

Представлення Edit.cshtml буде виглядати таким чином:

Фільтрація користувачів

Тепер адміністратор може створювати, редагувати і видаляти користувачів, а модератори та виконавці переглядати список користувачів. А що якщо адміністратор чи модератор захочуть знайти яку-небудь одну групу користувачів, наприклад, виконавців? Або захочуть переглянути користувачів, що працюють в одному відділі? Для цього введемо в додаток функцію фільтрації.

По-перше, змінимо метод дії Index і додамо до нього його двійник для запитів Post:

Оскільки на стороні клієнта нам знадобляться два випадаючих списка для вибору параметрів фільтрації (по відділах і по статусам), то ми формуємо для об'єкта SelectList, в які попередньо додаємо додатковий елемент для вибору відразу всіх категорій:

List<Role> roles = db.Roles.ToList();

roles.Insert(0, new Role { Name = "Всі", Id = 0 });

ViewBag.Roles = new SelectList(roles, "Id", "Name");

Потім в post - версії ми будемо отримувати передані параметри з представлення і проводити їх перевірку. І залежно від перевірки буде повертатися відфільтрований набір користувачів.

Тепер перейдемо до представлення Index.cshtml і додамо в нього форму з випадаючими списками для фільтрації:

Це у нас буде проста форма з двома випадають списками, зміст кожного з яких буде прив'язано до списку значень, переданих з контролера через ViewBag.

У результаті ми отримаємо приблизно таку форму: