Performance: Custom permissions
MEDIUM IMPACT
Custom permissions affect server response time and API interaction speed, impacting how quickly permission checks complete before rendering content.
class EfficientPermission(BasePermission): def has_permission(self, request, view): # Use cached user roles or prefetch related data user_roles = getattr(request.user, '_cached_roles', None) if user_roles is None: user_roles = list(UserRole.objects.filter(user=request.user)) request.user._cached_roles = user_roles return any(role.name == 'admin' for role in user_roles)
class SlowPermission(BasePermission): def has_permission(self, request, view): # Query database multiple times for each check roles_to_check = ['admin', 'moderator'] for role_name in roles_to_check: if UserRole.objects.filter(user=request.user, name=role_name).exists(): return True return False
| Pattern | DB Queries | Server Delay | Impact on INP | Verdict |
|---|---|---|---|---|
| Multiple DB queries per check | Many per request | High (50-100ms) | Increases input delay | [X] Bad |
| Cached roles with single DB query | One per session/request | Low (10-20ms) | Improves input responsiveness | [OK] Good |