МОД «Исключение из авторизации»

Постановка задачи

 

Задача - сделать так, чтобы заказы, сделанные определенными пользователями клиента, подтверждались без авторизации независимо от типа пассажира в них (т. е., даже если пассажир требует авторизации, если БЫ бронировал сам себе).

Назначение - если заказ делает авторизованное (доверенное) лицо клиента, то эти заказы не должны требовать дополнительной авторизации независимо от всех прочих условий, включая тип/статус пассажира - не важно, для кого он делает этот заказ.

Описание мода

Подключение МОДа

Для подключения МОДа необходимо перейти в раздел “Расширения” и выбрать раздел “Marketplace”.

Настройка МОДа

После активации МОДа, необходимо перейти в раздел настройки → “Персоны и Пользователи”

Далее выбрать интересующую персону.

Перейти в раздел “Изменить аккаунт”

В “расширениях” находится кнопка активации.

 

ВНИМАНИЕ:  Для включения / отключения данной настройки у персоны, она должна быть пользователем системы.

Работа с МОДом

После подключения, персона с активным правилом “Исключение из авторизации” будет иметь возможность оформлять заказы без необходимости авторизации.

Процесс разработки

В рамках разработки МОДа надо сделать следующие вещи:

  1. Расширить модель пользователя, добавив к ней булевый признак "Без авторизации";

  2. Расширить редактор пользователя, чтобы можно было включить настройку из п. 1;

  3. Переопределить бизнес-логику процесса старта авторизации из МОДа "Схемы авторизации". Это необходимо для того, чтобы при условии наличия у клиента этого признака выполнялся не запуск авторизации, а бизнес-логика базового контроллера перевода заказа в чистовик;

  4. Сформировать остнастку мода(прописать правила инициализации и описание для marketplace).

Расширение модели

Для расширения модели мы создаем класс  AuthorizationExceptionSettings (находится в папке Structure), который реализует интерфейс IXmlConvertible для сериализации и десериализации класса, который будет размещен в BLModels/Structures.

Далее создаем класс ClientWithAuthorizationException,  который наследуется от JavelinModelV2.Users.BaseUser <Structures.AuthorizationExceptionSettings>, который, кроме конструктора по умолчанию содержит конструктор, принимающий в качестве параметра id пользователя, по которому из базы загружаются данные пользователя.

Доработка редактора пользователя

В рамках этой задачи мы должны добавить представление для редактирования пользователя и View Controller, который отвечает за это действие (настройка расположена в редакторе персоны (раздел "Расширения" редактора) и выглядит таким образом:

Для реализации этого представления мы должны сделать контроллер MVC и представление .cshtml, которое и рисует данный портлет. Они будут размещены в папке Controllers и в подпапке PortableViews соответственно:

Далее разрабатываем сам контроллер ModAuthorizationExceptionClientEdtorControllerBaseViewControllerIExtendibleJavelinObject

 

В нем реализуем методы интерфейса IExtendibleJavelinObject:


Также делаем метод переключения необходимости авторизации ToggleAuthorizationIsNotRequired, который будет вызываться через AJAX при включении/выключении пользователем данного переключателя:

На входе в этот метод передается идентификатор пользователя, для которого осуществляется переключение:


Реализацию view можно посмотреть в примере на github.


Реализация бизнес-логики

Контроллер для работы с логикой авторизации с учетом настройки "Исключение авторизации" AuthorizationExceptionLogicsController наследуется от контроллера запуска авторизации ModComplexAuth.PluginLogics.BLControllers.Process.AuthorizationStartController.

Данный класс содержит два основных метода:

- Получение кнопки "Перевести в чистовик", если включена настройка "Исключение из авторизации" (GetActionInfo())

- Перевод заказа сразу в "Чистовик", если включена настройка "Исключение из авторизации" (ToCleanCopy(int id_ComplexReserve)) и настройки пользователя - свойство CurrentClientAuthSettings.

 

  • Контроллеры (папка Controllers):

Класс контроллера ModAuthorizationExceptionClientEdtorController наследуется от класса BaseViewController и реализовывает интерфейс IextendibleJavelinObject, который содержит метод проверки применения мода IsApplicable по его названию на латинице.

Метод контролера ToggleAuthorizationIsNotRequired(int id) служит для взаимодействия с переключателем настройки в представлении ClientSettingsEditor.cshtml через AJAX.

Метод RenderExtension (JavelinObject source) возвращает представление для  включения / отключения настройки «Исключение из авторизации» ClientSettingsEditor.cshtml.

 

  • Представления мода (папка PortableViews):

Представление ClientSettingsEditor.cshtml включает / отключает  настройку «Исключение из авторизации».

Взаимодействие с моделью данных через вызов jquery и id пользователя:

<input… onchange="(function () { $.get('/ModAuthorizationExceptionClientEdtor/ToggleAuthorizationIsNotRequired', {id: @(Model.id)}); })() ">