--- START OF FILE utils.py --- from functools import wraps from telegram import Update from telegram.ext import ContextTypes from google_services import google_handler import pandas as pd def check_permission(required_role: str): """Decorator สำหรับตรวจสอบสิทธิ์ของ User ใน Telegram""" def decorator(func): @wraps(func) async def wrapper(update: Update, context: ContextTypes.DEFAULT_TYPE, *args, **kwargs): if update.effective_user is None: return employee_id = str(update.effective_user.id) employees_df: pd.DataFrame = await google_handler.get_employees() # ค้นหาพนักงานจาก Telegram ID user_record = employees_df[employees_df['telegram_user_id'] == employee_id] if user_record.empty: await update.message.reply_text( "❌ คุณไม่มีรายชื่ออยู่ในระบบพนักงาน", parse_mode='HTML' ) return user_roles = user_record.iloc[0]['role_permissions'].lower().split(',') user_roles = [role.strip() for role in user_roles] if required_role.lower() in user_roles or 'admin' in user_roles: context.user_data['employee_record'] = user_record.iloc[0].to_dict() await func(update, context, *args, **kwargs) else: await update.message.reply_text( f"❌ คุณไม่มีสิทธิ์ {required_role.upper()} ในการใช้คำสั่งนี้", parse_mode='HTML' ) return wrapper return decorator