|
Рисунок 11 – Структура таблицы Products |
Таблица Reviews предназначена для хранения отзывов пользователей о конкретном товаре и состоит из 5 полей: идентификатор, дата и время создания отзыва, идентификатор товара, идентификатор пользователя и текст отзыва. (см. рис. 12)
|
Рисунок 12 – Структура таблицы Reviews |
Таблица Roles предназначена для хранения списка ролей пользователей сайта и состоит из 3 полей: идентификатор, наименование роли и дата и время создания записи. (см. рис. 13)
|
Рисунок 13 – Структура таблицы Roles |
Таблица Storages предназначена для хранения информации о складах и состоит из 4 полей: идентификатор, наименование склада, адрес склада и номер телефона склада. (см. рис. 14)
|
Рисунок 14 – Структура таблицы Storages |
Таблица UserInRoles предназначена для хранения информации о списке ролей каждого пользователя и состоит из 3 полей: идентификатор, идентификатор пользователя и идентификатор роли. (см. рис. 15)
|
Рисунок 15 – Структура таблицы UserInRoles |
Таблица Users предназначена для хранения информации о пользователях и состоит из 10 полей: идентификатор, адрес электронной почты пользователя, пароль пользователя (хэш-значение), номер мобильного телефона, фамилия пользователя, имя пользователя, отчество пользователя, доступ пользователя на сайт, дата и время регистрации пользователя и дата и время изменения данных пользователя (используется для отслеживания последнего посещения сайта пользователем). (см. рис. 16)
|
Рисунок 16 – Структура таблицы Users |
3.2 Модуль авторизации на сайте
В существует система авторизации, которая называется AspNetMembershipProvider. Данная система требует определенную схему хранения данных, что не подходит под задачи авторизации интернет-магазина, так как сведения о пользователях хранятся в всего лишь одной таблице. Для организации авторизации в базе данных используется три таблицы: Users, UserInRoles и Roles. Схема данных указанных таблиц представлена на рисунке 17.
|
Рисунок 17 – Связи таблиц Users, UserInRoles и Roles |
Основываясь на схеме данных, был разработан собственный модуль авторизации, основанный на использовании кукисов. Кукисы – это часть информации, отсылаемая сервером браузеру, которую браузер возвращает обратно серверу вместе с каждым (почти каждым) запросом. Реализация модуля авторизации выполнена в проекте ShopWeb данного приложения.
В разделе Controllers создан базовый класс котроллера BaseController, который является наследником класса Controller. Все остальные контроллеры MVC приложения являются наследниками BaseController.
Для реализации модуля авторизации необходимо сделать следующее:
- Использовать класс FormsAuthenticationTicket для хранения данных об авторизации в зашифрованном виде; Реализовать интерфейс IPrincipal; Установить в HttpContext. User для проверки ролей и IIdentity интерфейса; Реализовать сам интерфейс IIdentity; Добавить свойство CurrentUser в BaseController, в котором хранится значение авторизованного пользователя.
В пространстве имен ShopWeb. Global. Auth создан интерфейс IAuthentication, содержащий два свойства (AuthCookieProvider, CurrentUser) и два метода (Login, LogOut). Для IAuthentication в классе CustomAuthentication выполнена его реализация. При инициализации запроса, приложение получает доступ к HttpContext. Request. Cookies и инициализирует UserProvider (см. рис. 17)
|
Рисунок 17 – Фрагмент кода класса AuthHttpModule |
В классе User реализован метод InRoles (см. рис. 18)
|
Рисунок 18 – Фрагмент кода класса User |
В метод InRoles ожидается, что придет запрос о ролях, которые допущены к ресурсу, разделенные запятой. Например, «Администратор, Менеджер, Курьер, Покупатель», если хотя бы одна из ролей есть у пользователя (User) – то возвращается значение «истина» (доступ есть). Сравнение осуществляется по полю Role. RoleID.
В классе BaseController добавляется свойство CurrentUser, в которое записывается авторизированный пользователь.
Для связывания интерфейса IAuthentication и его реализации CustomAuthentication в классе NinjectWebCommon произведена регистрация Ninject (см. рис. 19).
|
Рисунок 19 – Фрагмент кода класса NinjectWebCommon |
В модуле AuthHttpModule на событие AuthenticateRequest совершается действие авторизации. Как только наш модуль авторизации узнает о контексте и содержащихся в нем кукисах, ту же моментально получает доступ к имени, по нему он в репозитории получает данные пользователя и возвращает в BaseController в свойство CurrentUser. Но не сразу всё, а по требованию. И последнее, что необходимо сделать - подключить модуль в Web. config (см. рис. 20)
|
Рисунок 20 – Фрагмент текста файла Web. config |
UML диаграмма модуля аутенфикации сайта интернет-магазина представлена на рисунке 21.
|
Рисунок 21 – UML диаграмма модуля аутенфикации |
3.3 Описание интерфейса незарегистрированного пользователя
Незарегистрированный пользователь при посещении сайта имеет возможность просмотреть 2 раздела: «О компании» и «Интернет-магазин». В первом сосредоточена информация о компании и ее деятельности, во втором – каталог товаров компьютерной техники. Также на главной странице реализован функционал поиска товара по наименованию модели с применением технологии jQuery - Autocomplete (см. рис. 19)
|
Рисунок 19 – Стартовая страница интернет-магазина |
Незарегистрированный пользователь при выборе товара через поиск или просмотра конкретной категории имеет возможность добавить его в корзину. (см. рис. 20)
|
Рисунок 20 – Страница просмотра категории «Планшеты» |
При просмотре категории товары на странице реализован постраничный просмотр и навигационный маршрут («хлебные крошки»). При отсутствии товара на складах кнопка «В корзину» исчезает, а в общей информации о товаре появляется сообщение «Товара нет в наличии». Незарегистрированный пользователь имеет возможность ознакомиться с отзывами о товарах, если таковые имеются (см. рис. 21). Отзывы о товарах могут оставлять только зарегистрированные пользователи.
|
Рисунок 21 – Страница просмотра отзывов о товаре |
При выборе товара он помещается в корзину. В корзине отображается список выбранного товара, его количество, цена за единицу товара и общая сумма заказа. Также предусмотрена возможность удаления определенного наименования товара из корзины. Количество товара можно изменить в поле «Количество» (см. рис. 22). На данное поле наложено ограничение выбора – максимальное количество товара не может быть больше, чем суммарное каждого из товаров на всех складах. В случае превышения выводится сообщение пользователю (см. рис. 23).
|
Рисунок 22 – Страница просмотра выбранного товара (Корзина) |
|
Рисунок 23 – Сообщение пользователю |
После нажатия кнопки «Оформить заказ» в корзине незарегистрированный пользователь перенаправляется на форму регистрации, где он должен о себе регистрационные данные: фамилия, имя, отчество, номер мобильного телефона, адрес электронной почты, пароль для входа в систему и указать адрес доставки заказа (см. рис. 22). Все поля в форме обязательны для заполнения. К полю Email дополнительно применена проверка соответствия регулярному выражению (^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$) (см. рис. 23).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |



















