1. анализ применения контекстного механизма контроля


Download 1.31 Mb.
Pdf ko'rish
bet21/21
Sana19.06.2023
Hajmi1.31 Mb.
#1611011
TuriРеферат
1   ...   13   14   15   16   17   18   19   20   21
Bog'liq
ВКР - АкмальА

 
 
 


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:
1   ...   13   14   15   16   17   18   19   20   21




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling