Файл: Методика защиты информации в системах электронного документооборота (Выбор программных средств разработки).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 138

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Разрабатываемая система использует клиент-серверную технологию. В качестве клиента выступает браузер пользователя, в качестве сервера – совокупность программно-аппаратных средств, необходимых для работы системы (веб-сервер Microsoft IIS, СУБД PostgreSQL и веб-фреймворк Djаngo на языке программирования Pуthon).

Диаграмма развертывания представлена на рисунке 3.2.2.

Рисунок 3.2.2 – Диаграмма развертывания

Диаграмма развѐртывания описывает физическое развертывание компонентов на узлах и указывает, какие аппаратные компоненты существуют и какие программные компоненты работают на каждом узле.

Диаграмма развертывания позволяет:

    • определить и описать взаимосвязь компонентов системы по еѐ физическим узлам;
    • указать физическую связь между узлами системы на стадии еѐ применения.

Проектирование интерфейса

Проектирование интерфейса производилось на основе требований к системе, на этапе составления технического задания. Эскизы интерфейса представлены в приложении А.

Глава 4. РЕАЛИЗАЦИЯ

4.1 Серверная часть

Серверная логика веб-системы написана на языке программирования Pуthon версии 3.5. За основу был взят веб-фреймворк Djаngo версии 1.10.8.

Для удобной работы с веб-фреймворком Djаngo была использована интегрированная среда разработки для языка программирования Pуthon – PуChаrm. PуChаrm дает возможность производить анализ кода, а также дает удобный, современный графический отладчик, инструмент для запуска тестовых сценариев и что немаловажно поддерживает веб-разработку на веб- фреймворке Djаngo.

На рисунке 4.1.1 представлена структура проекта.

Рисунок 4.1.1 – Структура проекта

Изначально при создании проекта создаются несколько стандартных файлов:

    • Внешний каталог PersonalOnlineCabinet – это просто контейнер для проекта.manage.py – скрипт, который позволяет взаимодействовать с проектом Django.
    • Внутренний каталог PersonalOnlineCabinet – это пакет Python проекта.
    • init .py – пустой файл, который указывает Python, что текущий

каталог является пакетом Python.

    • settings.py – настройки/конфигурация проекта.
    • urls.py – конфигурация URL-ов для проекта Django. Это своего рода

«содержание» всех Django-сайтов. Обработчики URL в Djаngo настраиваются явно при помощи регулярных выражений.

    • wsgi.py – точка входа проекта для WSGI-совместимых веб- серверов. Основной платформой для развертывания Django является WSGI, это фактически стандарт для веб-серверов и приложений на Python.

requirements.txt – содержит список команд для pip, который устанавливает необходимые версии зависимых пакетов.

External Libraries – это список подключенных библиотек. Папки static и templates отвечают за внешний вид системы. Папка apps содержит все приложения.

Проект построенный на веб-фреймворке Djаngo состоит из одного или нескольких так называемых приложений. Каждое подобное приложение создается отчуждаемыми и подключаемыми, что позволяет использовать данные аpplicаtion в нескольких проектах. Это основная особенность архитектуры веб-фреймворка Djаngo от его конкурентов.

В результате разработки было создано три приложения: authentication для реализации авторизации, categories для реализации работы с категориями и document_cards для реализации работы с картами документов.

На рисунке 4.1.2 приведена структура приложения authentication, остальные приложения состоят из аналогичных компонентов.

Рисунок 4.1.2 – Структура приложения authentication Приложение содержит следующие стандартные компоненты:

    • migrations – каталог с файлами с миграциями;

Django использует миграции для переноса изменений в моделях (добавление поля, удаление модели и т.д.) на структуру базы данных.

Следует рассматривать миграции, как систему контроля версий для базы данных. Команда makemigrations отвечает за сохранение состояния моделей в файле миграции – аналог коммита, а migrate отвечает за их применение к базе данных.

    • templates – каталог с шаблонами для данного приложения;
    • init .py – пустой файл, который указывает Python, что текущий

каталог является пакетом Python;

    • admin.py – здесь хранятся настройки стандартной административной панели;
    • apps.py – для настройки некоторых атрибутов приложения;
    • models.py – файл, в котором хранятся модели приложения;
    • test.py – файл для юнит-тестов;
    • urls.py – конфигурация URL-ов для проекта Django;
    • views.py – файл для хранения представлений.[17]

Представление – это ―тип страниц вашего приложения, которое является функцией для обработки запроса и использует шаблон для генерации страницы.[18]

Представления являются основой серверной части системы и отвечают за:


  • любую бизнес-логику;
  • контекстный словарь с данными для шаблона;
  • рендеринг шаблона с контекстом;
  • объект отклика, который пропускает отрендеренные результаты обратно в среду разработки.

Приложение authentication включает пять представлений:

    • login – отвечает за аутентификацию пользователя и генерацию проверочного кода активации;
    • token – отвечает за второй этап аутентификации, проверку введенного кода, и авторизацию пользователя на сайте;
    • logout – отвечает за выход пользователя из системы;
    • change_password – отвечает за смену пароля пользователем;
    • change_password_done – отвечает за вывод страницы об успешной смене пароля.

На рисунке 4.1.3 представлена диаграмма деятельности для представления login, на рисунке 4.1.4 представлена диаграмма деятельности для представления token.

Приложение categories включает четыре представления:

  • main – отвечает за формирование главной страницы со списком родительских категорий и деревом объектов;
  • create_category – отвечает за создание категории;
  • edit_category – отвечает за редактирование категории;
  • category – отвечает за вывод содержимого каждой категории.

Ниже приведено представление create_category.

def create_category(request, category_id): if not request.user.is_authenticated():

return redirect('/') else:

if request.method == 'POST':

name = request.POST.get('name', '') comment = request.POST.get('comment', '')

category = Categories.objects.create(name=name, parent_id=category_id, comment=comment)

category.save()

groups = request.POST.getlist('groups') for groups in groups:

group = Group.objects.get(name=groups) categorygroups =

CategoriesUserGroups.objects.create(category_id=category.category_id, user_group_id=group.id) categorygroups.save()

user = auth.get_user(request).id

_id = category.category_id

history = CategoriesHistory.objects.create(category_id=_id, user_id=user, action_id=1, date=datetime.now(), name=name, comment=comment)

history.save()

for user in User.objects.all():

if user.has_perm('categories.view_categories', category): email = user.email

send_mail('Оповещение из «Личный кабинет ЭлеСи»', 'В системе «Личный кабинет» создана новая категория' + ' «' + category.name + '». Ссылка: http://217.18.157.5:8001/categories/%s' % category_id, 'kolok@elesy.ru', [email])

return HttpResponseRedirect('/categories/%s' % category_id) else:

return render(request, "create_category.html",

{

'category': Categories.objects.filter(category_id=category_id), 'categories': Categories.objects.all(),

'user': auth.get_user(request),

})

В данном представлении сперва проверяется аутентифицирован ли пользователь, после чего получаются данные из запроса и создаются записи в таблицах Categories (добавляется новая категория), CategoriesUserGroups (добавляются выбранные группы для данной категории) и CategoriesHistory (добавляется запись о создании категории).


Приложение document_cards включает пять представлений:

  • document_card – отвечает за вывод информации о карте документа;
  • create_document – отвечает за создание карты документа;
  • edit_document_card – отвечает за редактирование карты документа;
  • delete_document_card – отвечает за удаление карты документа;
  • addpost – отвечает за создание комментария. Ниже приведено представление create_category.

def edit_document_card(request, document_card_id): if not request.user.is_authenticated():

return redirect('/') else:

instance = get_object_or_404(DocumentCards, document_card_id=document_card_id) if request.method == "POST":

form = DocumentForm(request.POST, request.FILES, instance=instance) if form.is_valid():

instance = form.save()

instance.name = request.POST.get('name', '') instance.comment = request.POST.get('comment', '') instance.save()

user = auth.get_user(request).id

_id = instance.document_card_id

history = DocumentsHistory.objects.create(document_card_id=_id, user_id=user, action_id=2, date=datetime.now(), name=instance.name, comment=instance.comment, file=basename(instance.file.name))

history.save()

category = Categories.objects.get(category_id= instance.category_id) for user in User.objects.all():

if user.has_perm('document_cards.view_document_cards', category): email = user.email

send_mail('Оповещение из «Личный кабинет ЭлеСи»', 'В системе «Личный кабинет» изменен документ' + ' «' + instance.name + '». Ссылка: http://217.18.157.5:8001/document_cards/%s' % document_card_id, 'kolok@elesy.ru', [email])

return HttpResponseRedirect('/document_cards/%s' % document_card_id)

else:

form = DocumentForm(instance=instance)

return render(request, "edit_document_card.html",

{

'form': form,

'categories': Categories.objects.all(), 'user': auth.get_user(request),

'date_create': DocumentsHistory.objects.filter(action_id=1), 'this': instance,

})

В данном представлении сперва проверяется аутентифицирован ли пользователь, после чего получается существующий экземпляр модели и данные из запроса и изменения сохраняются. После чего создается запись в таблице DocumentsHistory о изменении каты документа.

4.2 Клиентская часть

Клиентом разрабатываемой системы является браузер. Клиентская часть веб-системы написана с использованием HTML, CSS и мультипарадигменным языком программирования JаvаScript. В качестве основного фреймворка для реализации интерфейса представлений был использован Bootstrаp 3, который предоставляет разработчикам коллекцию инструментов для создания веб- страниц.

За клиентскую часть отвечают шаблоны, которые предоставляют удобный для дизайнера синтаксис для управления отображением информации пользователю.

Шаблоны содержат статический HTML и динамические данные, рендеринг которых описан специальным синтаксисом.

Djаngo предоставляет бэкенд для собственной системы шаблонов, которая называется – язык шаблонов Djаngo (Djаngo tеmplаtе lаnguаgе, DTL).

Djаngo предоставляет стандартный АPI для загрузки и рендеринга шаблонов, незавимисо от используемого бэкенда. Загрузка включает в себя поиск шаблона по названию и предварительную обработку, обычно выполняется загрузка шаблона в память. Рендеринг означает передачу данных контекста в шаблон и возвращение строки с результатом.


На рисунке 4.2.1 представлена структура общих папок static, media, templates, отвечающих за внешний вид системы.

Рисунок 4.2.1 – Структура папок static, media, templates

Папка static содержит STATIC файлы, это файлы, прописанные в коде или шаблонах.

Файлы MEDIA, которые появляются в результате работы приложения находятся в папке media на сервере.

В static находятся папки для каждого приложения, содержащие CSS и Javascript файлы.

В общей папке templates содержаться шаблон для переопределения шаблона панели администратора, а также базовый шаблон bootstrap3.html задающий структуру и основные стили для всей системы.

Рисунок 4.2.2 – Шаблоны приложения authentication

Приложение authentication содержит шаблоны auth и token, отвечающие за формирование страниц аутентификации и ввода кода подтверждения соответственно, а так же change_password, для отображения страницы смены пароля пользователем и change_password_done, для отображения страницы с информацией об успешной смене пароля.

Шаблон auth.html представлен ниже:

{% extends 'bootstrap3.html' %}

{% load bootstrap3 %}

{% load staticfiles %}

{% block auth %}

<link href={% static "authentication/style.css" %} rel="stylesheet">

<form id="form_login" method="post" class="form-signin" role="form">

{% csrf_token %}

<img class="img" src="{% static "images/elesy.png" %}" alt="" width="30%">

<input type="text" id="inputName" name="username" class="form-control" placeholder="Учетная запись" required autofocus>

<input type="password" id="password" name="password" class="form-control" placeholder="Пароль" data-toggle="tooltip" data-placement="right" data-trigger="manual" data- title="Включен Caps Lock" required>

<button class="btn btn-lg btn-primary btn-block" type="submit">Войти</button>

<p class="mt-5 text-muted text-center">&copy; 2018</p>

{% if messages %}

<div class="modal fade" id="myModal" role="dialog">

<div class="modal-dialog">

<div class="modal-content">

<div class="modal-header">

<button type="button" class="close" data-dismiss="modal">&times;</button>

<h4 class="modal-title">Ошибка</h4>

</div>

<div class="modal-body">

{% for message in messages %}

{{ message }}

{% endfor %}

</div>

</div>

</div>

</div>

{% endif %}

</form>

<script type="text/javascript" src="{% static 'authentication/jquery.js' %}">

{% endblock %}

Рисунок 4.2.3 – Шаблоны приложения categories Приложение categories содержит следующие шаблоны:

  • menu – отображение главной страницы со списком родительских категорий и деревом объектов;
  • create_category – отображение страницы создания категории;
  • edit_category – отображение страницы редактирования категории;
  • category – отображение страницы с содержимым каждой категории. Шаблон menu.html представлен в приложении Г.