|
|
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); |
|
|
|
|
|
|
|
|
const authzManager = new Authorization(); |