from rest_framework.permissions import BasePermission, SAFE_METHODS class IsActiveUser(BasePermission): def has_permission(self, request, view): return request.user and request.user.is_active class IsSuperAdmin(BasePermission): """ Allows access to super admins and admins with full panel privileges. """ def has_permission(self, request, view): return ( request.user and request.user.is_authenticated and (request.user.is_super_admin_panel_user() or request.user.is_admin_panel_user()) ) class IsPanelUser(BasePermission): """ Allows access to super admins, admins, and professors. """ def has_permission(self, request, view): return ( request.user and request.user.is_authenticated and request.user.can_access_admin_panel() ) class IsSuperAdminOrReadOnlyForProfessor(BasePermission): """ Allows full read-write access to super admins and admins, but only read-only (GET, HEAD, OPTIONS) access to professors. """ def has_permission(self, request, view): if not request.user or not request.user.is_authenticated or not request.user.is_active: return False # Super admin / admin can do everything if request.user.is_super_admin_panel_user() or request.user.is_admin_panel_user(): return True # Professor has read-only access if request.user.is_professor_panel_user(): return request.method in SAFE_METHODS return False