1. анализ применения контекстного механизма контроля
Download 1.31 Mb. Pdf ko'rish
|
ВКР - АкмальА
74 ПРИЛОЖЕНИЕ import hashlib import sqlite3 import logging import requests logging.basicConfig(filename='access.log', level=logging.INFO) class SmartHome: def init(self): self.access_control = AccessControl() def login(self): username = input("Введите логин: ") password = input("Введите пароль: ") if self.access_control.check_credentials(username, password): self.start_menu() else: print("Неверный логин или пароль.") def start_menu(self): while True: print("Выберите ресурс:") print("1. Дверь") print("2. Освещение") print("3. Система безопасности") print("4. Термостат") print("0. Выйти") choice = input("Ваш выбор: ") if choice == "0": break elif choice == "1": self.access_resource("door") elif choice == "2": 75 self.access_resource("lighting") elif choice == "3": self.access_resource("security_system") elif choice == "4": self.access_resource("thermostat") else: print("Некорректный выбор. Попробуйте еще раз.") def access_resource(self, resource): user = self.access_control.get_current_user() with self.access_control.grant_access(user, resource): command = input("Введите команду (ВКЛ/ВЫКЛ): ") self.access_control.execute_command(resource, command) class AccessControl: def init(self): self.access_matrix = { "door": ["admin", "guest"], "lighting": ["admin"], "security_system": ["admin"], "thermostat": ["admin", "guest"] } self.current_user = None def check_credentials(self, username, password): connection = sqlite3.connect("access.db") cursor = connection.cursor() cursor.execute("SELECT password FROM users WHERE username = ?", (username,)) result = cursor.fetchone() 76 connection.close() if result: hashed_password = hashlib.sha256(password.encode()).hexdigest() if result[0] == hashed_password: self.current_user = username return True return False def get_current_user(self): return self.current_user def grant_access(self, user, resource): if user in self.access_matrix[resource]: print(f"Пользователь {user} получил доступ к ресурсу {resource}.") return AccessContext(user, resource) else: print(f"Пользователь {user} не имеет доступа к ресурсу {resource}.") return NullContext() def execute_command(self, resource, command): logging.info(f"Пользователь {self.current_user} выполняет команду {command} для ресурса {resource}.") auth_code = "YOUR_AUTH_CODE" data = { "resource": resource, "command": command, "auth_code": auth_code, "user": self.current_user } 77 response = requests.post("https://your-api-endpoint.com/command", data=data) if response.status_code == 200: print(f"Команда {command} для ресурса {resource} успешно выполнена.") else: print("Ошибка выполнения команды.") # Остальной код для выполнения команды в системе управления class AccessContext: def init(self, user, resource): self.user = user self.resource = resource def enter(self): return self def exit(self, exc_type, exc_val, exc_tb): pass class NullContext: def enter(self): return None def exit(self, exc_type, exc_val, exc_tb): pass 78 # Создание таблиц в базе данных (для примера) connection = sqlite3.connect("access.db") cursor = connection.cursor() # Создание таблицы пользователей cursor.execute("CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)") # Вставка тестовых пользователей в базу данных cursor.execute("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)", ("admin", hashlib.sha256("admin123".encode()).hexdigest())) cursor.execute("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)", ("guest", hashlib.sha256("guest123".encode()).hexdigest())) connection.commit() connection.close() # Пример использования smart_home = SmartHome() smart_home.login() Download 1.31 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling