Привет. Помните, я как-то упоминал, что на нашей системе появился первый рабочий проект, которым пользуются внутри сети компании? Ну тогда вы должны помнить и о том, что я обещал показать копию этого проекта. Обещал – выполняю.
Я разместил копию по адресу http://accesses.fussraider.ru. При переходе система потребует от вас авторизацию – это один из следующих модулей, о котором я пока не писал. Для входа я добавил 2 учетные записи: user / user123 и admin / admin123 (логин / пароль). Я даю данные от обоих пользователей для того, что бы вы в полной мере могли оценить работу системы и ее потенциал в будущем – в данном случае, можно оценить работу групп пользователей и их прав (групповые политики) на доступ к определенным действиям на сайте.
Итак, немного о самом проекте. Данный ресурс используется во внутренней сети IT-компании для удобного хранения и доступа к учетным данным клиентов на разных ресурсах: хостинг, регистратор, база данных, SSH и т.д. Необходимость подобного ресурса возникла давно, и даже была реализована на фреймворке Symfony. Но в силу того, что она была незаконченной, так еще и возни нам доставила, когда мы включили nginx на нашем сервере, я решил переписать все с нуля с
добавлением нового функционала. Реализовать я идею решил, конечно же на нашей CMS.
Помимо простого хранения данных я решил добавить:
поддержку нескольких пользователей с распределением прав
возможность добавлять/изменять/удалять как сами доступы, так и клиентов.
реализовать вывод страницы клиента, со всей информацией и имеющимися доступами в базе
хранение всех логинов и паролей организовать в зашифрованном виде
возможность немного настраивать внешний вид страницы
сделать работу с ресурсом максимально простой и удобной
Пользователь имеет права только на просмотр. Модератор может вносить изменения. В меню сверху выводятся только те пункты, к которому пользователь имеет доступ. В случае запроса страницы, на которую у пользователя нет прав – появится сообщение об этом.
#gallery-0-17 { margin: auto; } #gallery-0-17 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 33%; } #gallery-0-17 img { border: 2px solid #cfcfcf; } #gallery-0-17 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */
Шифрование. Вот тут пришлось попариться и перепробовать кучу вариантов. Остановился на том, который вы можете наблюдать. Если вы побродили по сайту, то могли обратить внимание, что колонки “Логин” и “Пароль” таблице – пустые. Это не случайно.
Так как хранимые данные – это приватная информация клиентов, то к хранению такого рода данных нужно отнестись серьезно. В моем случае все данные зашифрованы дважды двумя разными алгоритмами по двум ключам. Первый ключ – хранится на сервере в файле конфигурации нашей системы, второй – публичный ключ, который сообщается устно пользователям ресурса и вводится после авторизации. Один из алгоритмов – вариация XOR-шифрования, второй я называть не буду, по соображениям безопасности (на самом деле я забыл название :-D). Сначала происходит шифрование по первому алгоритму с его ключом, затем результат первого шифрования прогоняется через второй алгоритм со вторым ключом. При таком подходе – даже если произойдет взлом и злоумышленник получит полную копию базы и файлов сайта – без публичного ключа на расшифровку уйдут века, если не больше.
Для расшифровки данных необходимо задать этот публичный ключ. Сделать это можно в выпадающем меню настроек (шестерни) – рядом с логином находится кнопка с замком. Если ключ задан – она зеленая, если нет – красная. Нажмите на нее и в появившемся окне введите публичный ключ – 123456789. После подтверждения о том, что ключ установлен вы увидите все данные. Этот ключ хранится md5-хешем в куках ровно 1 неделю, после чего потребуется снова его ввести. Если ключ был введен неверно – данные расшифровать не удастся и на странице ничего не изменится, за исключением кнопки (она станет зеленой) – задать ключ заново можно кликнув по той же кнопке с замком.
#gallery-0-18 { margin: auto; } #gallery-0-18 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 50%; } #gallery-0-18 img { border: 2px solid #cfcfcf; } #gallery-0-18 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */
При добавлении доступов в базу – необходимо чтобы ключ был установлен, т.к. система будет использовать его при шифровании. Если он не задан – данные будут доступны без ключа. Если он задан неверно – для расшифровки будет требоваться вводить этот самый “неверный” ключ. При выходе – сессия и все куки с публичным ключом затираются. По сути, если нет нужды в двойном шифровании, можно просто не вводить ключ и добавлять все данные без него – данные будут зашифрованы только по XOR-алгоритму с ключом, который, как я уже говорил, установлен на сервере.
Весь интерфейс работает на библиотеке UIKit 2. Изучал ее по мере разработки. Получилось вроде неплохо. Отзывчиво и удобно. Почему именно эта библиотека – мне понравилась ее модульная структура, чего нет у Bootstrap. Хотя документация – мне показалась ужасной, как и параллакс. Но сейчас разрабатывается 3я версия – посмотрим что выйдет, а пока едем дальше.
Все что касается хранимых данных доступов – реализовано как кастомный модуль accesses. Для шифрования был написан новый модуль ядра – crypt. Про него будет статья, но только когда мы напишем авторизацию, групповые политики, ЛК и прочее (т.е. не очень скоро, т.к. он не нужен). Данный модуль позволяет добавлять, изменять и удалять любые данные клиента или самих клиентов. Так же просмотр самих клиентов со списком все доступов по нему. Если ключ не задан или задан неверный – зашифрованные данные остаются недоступными. При попытке удаления любых данных запрашивается подтверждение, а при успешном сохранении – сообщение об успехе операции.
#gallery-0-19 { margin: auto; } #gallery-0-19 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 33%; } #gallery-0-19 img { border: 2px solid #cfcfcf; } #gallery-0-19 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */
Был разработан еще один модуль, тоже custom – personalisation. Работу этого модуля можно оценить перейдя в раздел “Персонализация” в меню настроек.Тут можно сменить фоновое изображение, указав на него ссылку; нижний отступ от меню и верхний от блока с контентом; прозрачность меню. Поиграйте с настройками, посмотрите результат – я лишь для этой цели и поднял копию – для демонстрации. Все величины задаются в том формате, что и в CSS – px, em, rem, %, top, center и пр.
#gallery-0-20 { margin: auto; } #gallery-0-20 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 20%; } #gallery-0-20 img { border: 2px solid #cfcfcf; } #gallery-0-20 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */
При входе под одним пользователем с другого браузера – сессия первого обрывается. Основной функционал – это конечно же поиск доступов какого-либо клиента. Для демонстрации я немного наполнил базу фейковыми данными. Поиск производится “на лету” от трех символов в строке описка. Вбив в нее, например слово host мы получим выдачу всех данных из БД, в которых есть данная подстрока. Если мы заведомо знаем, что ищем доступ в базу данных – под строкой поиска есть блок кнопок: когда одна или несколько кнопок нажаты – устанавливается фильтр поиска только по выбранным типам доступа. По умолчанию на странице выводятся последние добавленные данные.
Для удобства и экономии времени при пользовании ресурсом – при клике на любую ячейку таблицы – ее содержимое копируется в буфер обмена, т.е. не требуется выполнять выделения и выполнение операции копирования – клик и все. О том, что было скопировано – сообщает выпадающая сверху подсказка. В случае возникновения ошибки – вместо оповещения с зеленым фоном будет выведена ошибка на красном фоне.
Ну и в общем-то пока это все. Этот проект будет развиваться. В него будут вноситься правки и конечно же он всегда будет на самой актуальной версии нашего движка, но его развитие будет проходить несколько отдельно и закрыто. Отдельно – потому что тут используются сторонние библиотеки – а как помните в самом начале я говорил, что мы будем собирать полностью свой велосипед, ну а закрыто – думаю понятно почему. Возможно, когда нибудь, этот проект вырастет в самостоятельную CRM-систему… Но прервемся от мечтаний и … побродите по сайту, расскажите свои впечатления. Возможно вы обнаружили какой-то баг или недочет, либо у вас есть своя крутецкая идея – поделитесь, я всегда открыт новым идеям.
На этом у меня все! Хотелось бы узнать ваше мнение, критику и другие комментарии как этого проекта так и всей системы в целом. До встречи в следующих материалах.
Accesses.lan – первый рабочий проект на нашей CMS Привет. Помните, я как-то упоминал, что на нашей системе появился первый рабочий проект, которым пользуются внутри сети компании?

















