v3
latestOpenAPI 3.1.02026-07-311,4541,5202.3 MBApi Testsets Rows Partial Update 2
Mixin for views that need method-level permission enforcement.
Supports two approaches for defining permissions:
-
Auto-generation (Recommended - DRY): Set permission_resource to auto-generate CRUD permissions based on HTTP methods:
class MyView(PermissionMapMixin, JWTAndAPIKeyAuthenticationViewMixin, RetrieveUpdateDestroyAPIView): permission_resource = Resources.LOG # Auto-generates: # GET -> log:read # PATCH -> log:update # DELETE -> log:delete
Override specific methods via permission_map (always use constants): class MyView(PermissionMapMixin, ...): permission_resource = Resources.LOG permission_map: PermissionMap = { "GET": None, # Override: no permission required for GET "POST": make_permission(Resources.LOG, CRUDActions.READ), # POST acts as read }
-
Explicit mapping (for non-CRUD or complex cases - always use constants): class MyView(PermissionMapMixin, JWTAndAPIKeyAuthenticationViewMixin, APIView): permission_map: PermissionMap = { "GET": make_permission(Features.PROXY, Actions.ACCESS), "POST": make_permission(Features.PLAYGROUND, Actions.ACCESS), }
-
Dynamic logic (most flexible): def get_required_permission(self, method: str) -> str | None: if self.kwargs.get('public'): return None return "dataset:read"
Notes:
- permission_map acts as an override when permission_resource is set
- If neither is defined, no permission check is performed (backward compatible)
- HasJWTPermission automatically enforces permissions when defined
Path parameters
Headers
JWT access token or Respan API key