[ELMA3] Реализация кастомного окна входа в систему
Стандартное окно входа в систему можно изменять. Изменению подлежит как графическая составляющая, так и функциональная.
Пример измененного окна входа в систему:
Рис. 1. Пример кастомного окна авторизации
1. Изменен логотип компании.
2. Затемнена кнопка Войти в систему.
3. Изменена надпись в правом верхнем углу – Доброе утро!, вместо Управление бизнес-процессами.
4. Скрыта кнопка Запомнить меня на этом компьютере, для повышения информационной безопасности.
5. Изменена всплывающая подсказка.
При генерации страницы, все изображения загружаются из папки
C:\ELMA3\Web\Content\Images\Logon
Где Logo.png является основным изображением, а logon_button.png - кнопкой входа в систему. Путем редактирования этих файлов, можно добиться изменения внешнего вида входа в систему: вставить лого своей компании, изменить цвета.
Все остальное можно изменять редактируя cshmtlфайл LogOn, который находится в папке ELMA3\Web\Modules\EleWise.ELMA.BPM.Web.Security\Views\Account
LogOn.cshtml - это файл, который задает разметку с помощью языка разметки Razor. В случае, если Вы знакомы с этим языком, сложностей быть не должно. Для тех, кто еще не знаком с данным языком или с языком разметки HTML, для простоты навигации в коде, можно ориентироваться на теги <div>…</div>, например, часть кода отвечающая за логин начинается с <div id="login_div"> и заканчивается </div>
<div id="login_div"> <table width="100%"> <tr id="loginRow" style="display: none"> <td class="label_field"><span class="bluebold">@SR.Login</span> </td> <td>@Html.TextBox("login", "", new { @class= "text_width" })</td> </tr> <tr id="passwordRow" style="display: none"> <td class="label_field"><span class="bluebold">@SR.Password </span> </td> <td>@Html.Password("password", "", new { @class = "text_width" })</td> </tr> @Html.ExtensionZone("Security-LogOn-Token-select") <tr> <td colspan="2"> <div class="error"> @Html.ValidationSummary() </div> </td> </tr> <tr id="loginByCert" style="display: none"> <td colspan="2" style="text-align: center"> <a href="javascript:void(0)" onclick="redirect_to_cert()">@SR.T("Войти с использованием сертификата")</a> </td> </tr> <tr> <td colspan="2" class="blue" > @Html.CheckBox("rememberMe") @Html.Label("rememberMe", @SR.Remember) </td> </tr> <tr> <td colspan="2" class="td_login_button"><input type="submit" name="LogIn" value="@SR.Enter" class="login_button" /></td> </tr> </table> </div>
Для того чтобы убрать возможность запомнить авторизованного пользователя, можно удалить следующую конструкцию:
<tr id="rememberMeRow" style="display: none"> <td colspan="2" class="blue" style="padding-top:30px" > @Html.CheckBox("rememberMe") @Html.Label("rememberMe", @SR.Remember) </td> </tr>
Рис. 2. Окно авторизации системы
Для редактирования текста в правом-верхнем углу, и всплывающей подсказки, достаточно просто поменять текст здесь:
@MvcHtmlString.Create(SR.T("Управление<br/>бизнес-процессами"))
Где тег <br/> является переносом строки, а в кавычках находится сам текст.
А эта конструкция отвечает за всплывающую подсказку, и в кавычках находится ее текст
function show_tip() { var conf = { content: { text: ’@MvcHtmlString.Create(SR.T("Для начала работы с системой войдите под логином admin с пустым паролем.<br>Работая в системе, установите новый пароль."))’ }, position: { my: ’top left’, at: ’bottom left’, viewport: true }, show: ’focus’, hide: ’blur’ };
Для более глобальных изменений, недостаточно просто поменять текст и изменить изображения, например, создадим выпадающий список из существующих в системе пользователей. В этом примере используется подстановка пустого пароля. При необходимости можно по аналогии на форму добавить поле ввода пароля, чтобы пользователи не просто выбирали свою учетную запись из списка, но и проходили аутентификацию.
@{ Layout = null; } @using EleWise.ELMA.BPM.Mvc.Application @using Microsoft.Web.Mvc <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>@SR.Authorization</title> <link rel="icon" href="@Url.Image("#favicon.ico")" type="image/ico" /> <link rel="shortcut icon" href="@Url.Image("#favicon.ico")" type="image/ico" /> @Html.Link("~/Content/Logon1.css", "stylesheet", "text/css") <link type="text/css" href="@Url.Content("~/Content/jquery-ui-1.8.15.custom.css")" rel="stylesheet"/> <link type="text/css" href="@Url.Content("~/Content/telerik.common.min.css")" rel="stylesheet"/> <link type="text/css" href="@Url.Content("~/Content/telerik.office2007.min.css")" rel="stylesheet"/> <script type="text/javascript" src="@Url.Content("~/Scripts/JQuery/jquery-1.6.4.min.js")"></script> <script type="text/javascript" src="@Url.Content("~/Scripts/JQuery/jquery-ui-1.8.15.custom.min.js")"></script> <script type="text/javascript" src="@Url.Content("~/Scripts/JQuery/jquery.qtip.min.js")"></script> @Html.ExtensionZone("Security-LogOn-Token-head") </head> <body class="logon"> <table style="width: 100%; text-align: center;"> <tr> <td class="td_center " align="center"> <div id="center_div"> <div id="logo_version"></div> <div id="logo_div"><div id="redaction_div"> //текст в правом-верхнем углу @MvcHtmlString.Create(SR.T("Управление<br/>проектами")) </div></div> <div id="login_div"> @using (Html.BeginForm()) { <div class="otherUserDiv"> //пароль и чек-бокс скрыты @Html.Hidden("password", "") @Html.Hidden("rememberMe", "false") //текст над выпадающим списком <span id="selectUser">@SR.T("Выберите пользователя")</span> //создание выпадающего списка из существующих пользователей @{ var users = UserManager.Instance.Find(u => u.Status == UserStatus.Active); var userListItems = users .Select(u => new SelectListItem { Text = u.GetShortNamePosition(), Value = u.UserName }); var dropDownList = Html.Telerik() .DropDownList() .Name("login") .BindTo(userListItems) .DropDownHtmlAttributes(new { style = "width:300px;" }) .HtmlAttributes(new { style = "width:300px;" }); } <div id="userSelector" class="align_left">@(dropDownList)</div> <br><br><br><br><br><br><br> <div class="td_login_button align_center">@Html.SubmitButton("LogIn", SR.Enter, new { @class = "login_button" })</div> </div> } </div> <div class="bottom"> <span class="blue align_left"> ELMA @(VersionInfo.GetVersion<SR>()) </span> <a href="http://www.elma-bpm.ru" class="align_right copyright">© EleWise 2006 - @System.DateTime.Now.Year</a> </div> </div> </td> </tr> </table> @(Html.Telerik().ScriptRegistrar().jQuery(false).Scripts(script => script.Add("~/Scripts/telerik.combobox.js"))) </body>
Рис. 3. Окно авторизации с возможностью выбора пользователей из выпадающего списка
Таким образом, кастомизировать окно входа в систему можно как угодно: без программирования можно изменить графическую составляющую и текст, а владея языком разметки Razor, можно даже создать окно логина с нуля.
В приложении есть готовые файлы LogOn в формате .txt.