Coverage for object_streams/visibility.py: 92%
13 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-02 17:07 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-02 17:07 +0000
1"""Visibility policies define the permission-scoped queryset for a user."""
3from __future__ import annotations
5from typing import Any
6from typing import Protocol
8from django.db import models
11__all__ = (
12 "AllowAllVisibilityPolicy",
13 "DenyAllVisibilityPolicy",
14 "VisibilityPolicy",
15)
18class VisibilityPolicy(Protocol):
19 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet:
20 """Return the queryset this user can see for the model and action."""
23class AllowAllVisibilityPolicy:
24 """Default visibility policy that exposes the model's default queryset."""
26 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet:
27 return model._default_manager.all()
30class DenyAllVisibilityPolicy:
31 """Visibility policy that exposes no rows."""
33 def get_queryset(self, user: Any, model: type[models.Model], action: str = "read") -> models.QuerySet:
34 return model._default_manager.none()