РЕШЕНИЕ ПОСТАВЛЕННОЙ ЗАДАЧИ
Для решения поставленной задачи был написан код на языке программирования «Python». В качестве программного обеспечения использовались: операционная система Windows 10 pro x64 версии 22H2, интегрированная среда разработки (IDE) JetBrains PyCharm версии 2021.3.1.
Вкачестве импортируемых библиотек были использованы следующие: requests, datetime, json, prettytable Для получения/отправки запросов, получения временных меток, работы с JSON файлами и создания визуализации матрицы доступа соответственно.
Врезультате разработки была получена программа, которая анализирует две матрицы доступа, исправляя основную. Кроме этого, был реализован весь дополнительный функционал, согласно техническому заданию.
Ниже представлена упрощенная схема работы программы:
1.В первую очередь, программа получает JSON файл матрицы доступа по ссылке на веб-ресурс, используя метод get API веб-ресурса
2.Затем программа считывает матрицу доступа из веб-ресурса и из текстового файла и инстанцирует каждого работника согласно структуре класса. Каждая из двух матриц доступа содержится в своем массиве объектов класса.
3.Следующим шагом является сравнение данных массивов объектов класса worker. В первую очередь, если существует работник и существует файл, указанные в корректной матрице доступа, но не совпадает их квалификатор доступа, программа в принудительном порядке (не спрашивая пользователя) меняет значение квалификатора на то, которое указано в корректной матрице доступа у этого работника к этому файлу. Во вторую очередь, программа предлагает пользователю принять решение, если у работника в веб-матрице нет файла, который указан в корректной матрице, добавить этот файл вместе с квалификатором из корректной матрицы или проигнорировать данное предложение. Кроме этого, стоит отметить, что если
7
работник, указанный в корректное матрице доступа отсутствует в матрице доступа на веб-ресурсе, то программа предложит его добавить в веб матрицу доступа вместе с тем файлом и квалификатором доступа, который указан в корректной матрице доступа. Данное предложение от программы можно проигнорировать.
4.После того, как все сравнения и изменения применены программа предложит посмотреть лог изменений: все изменения, в том числе и принудительные, записаны в файл журнала log.txt. Пользователь может как вывести весь лог в поток вывода, так и проигнорировать данное предложение. Стоит отметить, что при каждом перезапуске программы лог очищается.
5.Далее программа предлагает на выбор несколько опций:
a.Вывести матрицу полностью
b.Показать доступ к файлам определенного работника
c.Изменить доступ определенного работника к определенному файлу вручную
d.Вывести журнал лога
e.Завершить работу программы
6.Каждая из этих опций не завершает работу программы (кроме последней), а лишь выполняет свой функционал. Все эти опции находятся в бесконечном цикле и могут выполнятся столько раз, сколько пользователь пожелает.
7.Опция, отвечающая за вывод матрицы создает текстовую визуализацию матрицы доступа и записывает ее в файл Matrix_corrected.txt. В данной матрице указаны все квалификаторы доступа к файлам каждого из работников. Если же клетка пустует – значит никакой квалификатор доступа не установлен.
8.При использовании следующей опции, после выбора среди существующих работников, выводится содержание JSON-подобного файла, в
8
котором указаны все файлы, к которым указан какой-либо квалификатор
доступа у выбранного работника
9.Последняя опция позволяет сменить квалификатор доступа у выбранного работника к любому выбранному файлу, содержащемуся в исправленной на веб-ресурсе матрице доступа. Стоит отметить, что в случае отсутствия какого-либо квалификатора у работника к выбранному файлу, программапредложитнавыборквалификатордоступакфайлу,которыйбудет добавлен к выбранному работнику.
10.Опция выхода завершает работу программы.
9
Для старта программы необходимо заполнить файл task.txt
содержимым с ресурса http://194.87.94.159/supersec/task.php для правильной работы программы. В качестве наполнения случайным образом были получены данные с зерном 86525 (рисунок 2)
Рисунок 2. Наполнение файла task.txt
После успешного заполнения файла task.txt можно запускать программу. Сразу видно, что при первом запуске, ничего не нажимая, программа сразу внесла изменения (первая строка) (рисунок 3). При каждом внесении изменений программа сообщает об этом пользователю в поток вывода.
10
Рисунок 3. Старт программы.
Пользователю дается на выбор: добавить работнику “9XaHq6M7” файл test.txt или проигнорировать. Добавим файл. Программа успешно записала файл test.txt за работником, при этом сообщив об этом пользователю, а также указав, какой квалификатор доступа был добавлен (рисунок 4).
Рисунок 4. Добавление файла работнику Далее программа анализирует каждого следующего работника и файлы
в соответствии с корректной матрицей доступа. Попробуем проигнорировать запись файла работнику. Программа успешно выполнила указание и сообщила об этом. (рисунок 5)
Рисунок 5. Проигнорировано После выбора действий для каждого из работников программа
предложит вывести журнал своей работы (рисунок 6)
Рисунок 6. Предложение о выводе журнала лога
11
При выборе опции вывода, программа продемонстрирует полное содержание журнала пользователю в поток вывода (рисунок 7). К сожалению, полное содержание не поместилось в пределы консоли. Для удобства содержимое журнала лога помечается ключевым словом “----- LOGS -----” сверху и снизу.
Рисунок 7. Журнал лога При нажатии клавиши «Ввод» программа продолжит свою работу и
предложит на выбор все остальные свои опции (рисунок 8).
Рисунок 8. Дополнительные опции
12
При нажатии клавиши «1» будет создан текстовый файл, содержащий в себе визуализацию полной откорректированной матрицы доступа (рисунок 9а, 9б)
Рисунок 9а. Выбор опции создания визуализации полной откорректированной матрицы доступа
Рисунок 9б. Часть созданной полной откорректированной матрицы доступа
13
Если же выбрать опцию «2», то пользователю будет предложено выбрать работника из списка всех работников, упомянутых в полной матрице доступа (рисунок 10). При выборе одного из работников, будет продемонстрированы файлы, к которым он имеет или не имеет доступ. (рисунок 11)
Рисунок 10. Выбор работника
Рисунок 11. Доступы работника под номером 12 14
Теперь же, воспользуемся функционалом смены квалификатора доступа у файла на примере 12 работника. Поменяем квалификатор какого-нибудь файла, к которому у него есть доступ, тем самым запретив данному работнику доступ к нему. Выбираем функцию «3», выбираем файл «file_06.log» и работника «EerlnhJY». (рисунок 12). При этом программа сообщит какой квалификатор доступа уже есть (если есть) у данного работника к данному файлу.
Рисунок 12. Выбор файла и работника
15
Выбираем противоположный квалификатор. Программа сообщит, что она сменила доступ данному работнику (рисунок 13)
Рисунок 13. Смена квалификатора доступа у работника к файлу Следует посмотреть, что стало с его доступами к файлу при помощи
опции «2» (рисунок 14).
Рисунок 14. Смена доступа к файлу Действительно, доступ к выбранному раннее файлу изменился: с «+» на
«-».
16
Следующим шагом стоит попробовать добавить этому работнику новый файл с выбранном квалификатором при помощи опции ручного добавления. Выбираем опцию «3» и файл, к которому у работника нет никакого квалификатора доступа (рисунок 15).
Рисунок 15. Выбор файла, к которому нет квалификатора доступа Программа сообщает, что у данного работника нет никакого вида
доступа к выбранному файлу.
17
Выбираем «+» и проверяем при помощи опции «2» (рисунок 16а,16б). Программа сообщит, что у работника теперь есть определенный квалификатор доступа.
Рисунок 16а. Выдача квалификатора доступа
Рисунок 16б. Файл записан за выбранным работником
Файлуспешно записан заработником«EerlnhJY»сквалификатором«+», что, в свою очередь, подтверждает правильность работы программы.
Опция «4» лишь покажет журнал лога, который программа предлагала вывести раннее. Опция «0» завершит работу программы. (рисунок 17)
Рисунок 17. Завершение работы программы
18
