Laboratornaya_rabota_2_MSA



2

 

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

Югорский государственный университет

 

 

 

 

 

Лабораторная работа № 2 по теме:

«Управление доступом в информационных системах на основе ролей»

 

 

 

Выполнил: студент группы 1531б

Михайлов С.А.

 

______________

(подпись)

 

Проверил: Гончаренко О.В.

 

______________

(подпись)

 

 

 

 

 

Ханты-Мансийск 2016

Оглавление

1.   Задание   3

2.   Основная часть   4

3.   Вывод   7

 

 

1. Задание

Цель: Реализация системы, в которой реализовано управление доступом на основе ролей.

Задание 1. Используя выбранный язык программирования реализовать управление доступом на основе ролей. В программе необходимо реализовать минимально три роли.

Задание 2. Оформить отчет по лабораторной работе согласно Правилам оформления отчетов.

2. Основная часть

В качестве системы, в которой реализовано управление доступом на основе ролей, была реализована программа в виде терминала, в которой пользователь может вводить определенные команды. Некоторые доступны только определенным ролям пользователей. Было реализовано три роли:

• администратор;

• пользователь;

• гость.

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

Таблица 1 – Матрица доступа

Команда \ Роль

администратор

пользователь

гость

Команда

приветствия

+

+

Получение списка пользователей

+

 

Листинг:

#include <iostream>

#include <map>

 

using namespace std;

 

// Класс описывающий пользователя

class User {

public:

   // Поля с данными пользователя

   string role;

   string username;

   string password;

 

   // Конструктор по умолчанию, создает профиль гостя

   User() {

      role = «guest»;

      username = «»;

      password = «»;

   };

   

   // Конструктор с параметрами пользователя

   User(string userName, string userPass, string userRole) {

      role = userRole;

      username = userName;

      password = userPass;

   }

};

 

int main() {

   // Матрица доступа

   map < string, map <string, bool> > accessMatrix;

   accessMatrix[«admin»][«show hello»] = true;

   accessMatrix[«admin»][«list users»] = true;   

   accessMatrix[«user»][«show hello»] = true;

   accessMatrix[«user»][«list users»] = false;   

   accessMatrix[«guest»][«show hello»] = false;

   accessMatrix[«guest»][«list users»] = false;

   

   // Список пользователей

   map <string, User> users;

   users[«admin»] = User(«admin», «PassWord», «admin»);

   users[«user1»] = User(«user1», «pass», «user»);

   

   // Коды команд

   map <string, int> commands;

   commands[«help»] = 1;

   commands[«login»] = 2;

   commands[«listusers»] = 3;

   commands[«hello»] = 4;

   commands[«quit»] = 5;

   

   // Объявление переменных для хранения введенных пользователем строк

   string command;

   string username;

   string password;

   // Создаем объект, идентифицирующий текущего пользователя, конструктор по умолчанию создает профиль гостя

   User currentUser;   

   

   // Выводим приветственное сообщение

   cout << «Welcome to Role Based Access Control Program!» << endl;

   

   // В бесконечном цикле обрабатываем вводимые пользователем команды

   while (true) {

      // Выводим индикатор ввода в виде символа «>»

      cout << «> «;

      // Ждем ввода команды

      cin >> command;

      

      // По введенной команде находим ее код

      switch (commands[command]) {

         case 1: // Код команды help

            // Выводим список и описание доступных команд

            cout << «You can use the following commands:» << endl;

            cout << «\tlogin — to log in to System» << endl;

            cout << «\tlistusers — to print all users of System» << endl;

            cout << «\thello — to print hello message» << endl;

            cout << «\tquit — to quit system» << endl;

            break;

         case 2: // Код команды login

            cout << «Enter username: «;

            cin >> username;

            cout << «Enter password: «;

            cin >> password;

            // Проверяем соответствие введенного пароля пароля указанного пользоваителя

            if (users[username].password == password) {

               // В случае соответствия устанавливаем данного пользователя текущим

               currentUser = users[username];

            } else {

               // В противном случае выводим сообщение об ошибке

               cout << «Error: Invalid username or password» << endl;

            }

            break;

         case 3: // Код команды listuser

            // Проверяем с помощью матрицы доступа, имеет ли данный пользователь право использовать данную команду

            if (accessMatrix[currentUser.role][«list users»] == true) {

               // Если имеет, то выводим с помощью цикла имена всех пользователей

               cout << «List of users:» << endl;

               for (map<string, User>::iterator iterator = users.begin(); iterator != users.end(); iterator++) {

                  cout << «\t» << iterator->second.username << endl;

               }

            } else {

               // В противном случае выводим, что он не имеет права использовать данную команду

               cout << «Error: You don’t have permission to do this» << endl;

            }

            break;

         case 4: // Код команды hello

            // Проверяем с помощью матрицы доступа, имеет ли данный пользователь право использовать данную команду

            if (accessMatrix[currentUser.role][«show hello»] == true) {

               // Если имеет, то выводим приветствие

               cout << «Hello, « << currentUser.username << endl;

            } else {

               // В противном случае выводим, что он не имеет права использовать данную команду

               cout << «Error: You don’t have permission to do this» << endl;

            }

            break;

         case 5: // Код команды quit

            // Выход осуществляем путем

            currentUser = User();

            break;

         default: // Любая другая команда

            // Сообщаем, что введенная команда не правильная

            cout << «invalid command» << endl;

      }

   }

      

   return 0;

}

 

Результат работы программы представлен на рисунке 1.

 

Рисунок 1 – Результат работы программы

 

3. Вывод

Реализовал систему, в которой реализовано управление доступом на основе ролей.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *