class Authorization { constructor() { this.roles = { 'student': 1, 'instructor': 2, 'admin': 3 }; } getCurrentUserRole() { const currentUser = authManager.getCurrentUser(); return currentUser ? currentUser.role : 'guest'; } hasRole(requiredRole) { const currentRole = this.getCurrentUserRole(); return this.roles[currentRole] >= this.roles[requiredRole]; } hasAnyRole(requiredRoles) { const currentRole = this.getCurrentUserRole(); return requiredRoles.includes(currentRole); } requireRole(requiredRole) { return (callback) => { if (this.hasRole(requiredRole)) { return callback(); } else { this.showAccessDenied(); return false; } }; } requireAuth(callback) { return () => { if (authManager.isAuthenticated()) { return callback(); } else { this.showLoginRequired(); return false; } }; } showAccessDenied() { alert('دسترسی denied. شما permission لازم برای این بخش را ندارید.'); } showLoginRequired() { alert('لطفاً برای دسترسی به این بخش وارد شوید.'); // در برنامه واقعی، کاربر به صفحه ورود هدایت می‌شود window.location.hash = '#/login'; } // بررسی دسترسی به منابع canAccessLesson(lessonId) { const currentUser = authManager.getCurrentUser(); if (!currentUser) return false; // در اینجا می‌توان منطق پیچیده‌تری برای دسترسی به درس‌ها پیاده‌سازی کرد return true; } canEditContent() { return this.hasAnyRole(['instructor', 'admin']); } canManageUsers() { return this.hasRole('admin'); } } // دکوراتورهای سریع const requireStudent = (callback) => new Authorization().requireRole('student')(callback); const requireInstructor = (callback) => new Authorization().requireRole('instructor')(callback); const requireAdmin = (callback) => new Authorization().requireRole('admin')(callback); const requireAuth = (callback) => new Authorization().requireAuth(callback); // ایجاد نمونه singleton const authzManager = new Authorization();