RewardApp / trash /auth /authorization.py
Mhdeusi's picture
Rename auth/authorization.py to trash/auth/authorization.py
be14fe0 verified
from functools import wraps
from flask import request, jsonify
from .authentication import auth_manager
class Authorization:
def __init__(self):
self.roles = {
'student': 1,
'instructor': 2,
'admin': 3
}
def require_role(self, required_role):
"""دکوراتور برای بررسی سطح دسترسی"""
def decorator(f):
@wraps(f)
@auth_manager.login_required
def decorated(*args, **kwargs):
current_role = getattr(request, 'user_role', 'student')
if self.roles.get(current_role, 0) < self.roles.get(required_role, 0):
return jsonify({
'message': f'Insufficient permissions. Required role: {required_role}'
}), 403
return f(*args, **kwargs)
return decorated
return decorator
def require_roles(self, required_roles):
"""دکوراتور برای بررسی چندین سطح دسترسی"""
def decorator(f):
@wraps(f)
@auth_manager.login_required
def decorated(*args, **kwargs):
current_role = getattr(request, 'user_role', 'student')
if current_role not in required_roles:
return jsonify({
'message': f'Insufficient permissions. Required roles: {required_roles}'
}), 403
return f(*args, **kwargs)
return decorated
return decorator
def can_access_lesson(self, user_id, lesson_id):
"""بررسی دسترسی کاربر به درس"""
# در اینجا می‌توانید منطق پیچیده‌تری برای دسترسی اضافه کنید
# مثلاً بررسی اینکه کاربر درس را خریداری کرده یا در دوره ثبت نام کرده
return True
def can_edit_content(self, user_id, content_id):
"""بررسی امکان ویرایش محتوا"""
current_role = getattr(request, 'user_role', 'student')
return current_role in ['instructor', 'admin']
# نمونه singleton
authz_manager = Authorization()
# دکوراتورهای سریع دسترسی
require_student = authz_manager.require_role('student')
require_instructor = authz_manager.require_role('instructor')
require_admin = authz_manager.require_role('admin')