mirror of
https://github.com/pinry/pinry.git
synced 2025-11-13 08:35:41 +01:00
Feature: Add private property for board
This commit is contained in:
@@ -76,6 +76,7 @@ class Board(models.Model):
|
|||||||
|
|
||||||
submitter = models.ForeignKey(User)
|
submitter = models.ForeignKey(User)
|
||||||
name = models.CharField(max_length=128, blank=False, null=False)
|
name = models.CharField(max_length=128, blank=False, null=False)
|
||||||
|
private = models.BooleanField(default=False, blank=False)
|
||||||
pins = models.ManyToManyField("Pin", related_name="pins", blank=True)
|
pins = models.ManyToManyField("Pin", related_name="pins", blank=True)
|
||||||
|
|
||||||
published = models.DateTimeField(auto_now_add=True)
|
published = models.DateTimeField(auto_now_add=True)
|
||||||
|
|||||||
@@ -18,6 +18,14 @@ def filter_private_pin(request, query):
|
|||||||
return query.select_related('image', 'submitter')
|
return query.select_related('image', 'submitter')
|
||||||
|
|
||||||
|
|
||||||
|
def filter_private_board(request, query):
|
||||||
|
if request.user.is_authenticated:
|
||||||
|
query = query.exclude(~Q(submitter=request.user), private=True)
|
||||||
|
else:
|
||||||
|
query = query.exclude(private=True)
|
||||||
|
return query
|
||||||
|
|
||||||
|
|
||||||
class ThumbnailSerializer(serializers.HyperlinkedModelSerializer):
|
class ThumbnailSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Thumbnail
|
model = Thumbnail
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ class ImageTests(APITestCase):
|
|||||||
|
|
||||||
|
|
||||||
class PrivacyTests(APITestCase):
|
class PrivacyTests(APITestCase):
|
||||||
_JSON_TYPE = "application/json"
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(PrivacyTests, self).setUp()
|
super(PrivacyTests, self).setUp()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from taggit.models import Tag
|
|||||||
from core import serializers as api
|
from core import serializers as api
|
||||||
from core.models import Image, Pin, Board
|
from core.models import Image, Pin, Board
|
||||||
from core.permissions import IsOwnerOrReadOnly, OwnerOnlyIfPrivate
|
from core.permissions import IsOwnerOrReadOnly, OwnerOnlyIfPrivate
|
||||||
from core.serializers import filter_private_pin
|
from core.serializers import filter_private_pin, filter_private_board
|
||||||
|
|
||||||
|
|
||||||
class ImageViewSet(mixins.CreateModelMixin, GenericViewSet):
|
class ImageViewSet(mixins.CreateModelMixin, GenericViewSet):
|
||||||
@@ -35,20 +35,21 @@ class PinViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
|
|
||||||
class BoardViewSet(viewsets.ModelViewSet):
|
class BoardViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Board.objects.all()
|
|
||||||
serializer_class = api.BoardSerializer
|
serializer_class = api.BoardSerializer
|
||||||
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
||||||
filter_fields = ("submitter__username", )
|
filter_fields = ("submitter__username", )
|
||||||
ordering_fields = ('-id', )
|
ordering_fields = ('-id', )
|
||||||
ordering = ('-id', )
|
ordering = ('-id', )
|
||||||
permission_classes = [IsOwnerOrReadOnly("submitter"), ]
|
permission_classes = [IsOwnerOrReadOnly("submitter"), OwnerOnlyIfPrivate("submitter")]
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return filter_private_board(self.request, Board.objects.all())
|
||||||
|
|
||||||
|
|
||||||
class BoardAutoCompleteViewSet(
|
class BoardAutoCompleteViewSet(
|
||||||
mixins.ListModelMixin,
|
mixins.ListModelMixin,
|
||||||
viewsets.GenericViewSet,
|
viewsets.GenericViewSet,
|
||||||
):
|
):
|
||||||
queryset = Board.objects.all()
|
|
||||||
serializer_class = api.BoardAutoCompleteSerializer
|
serializer_class = api.BoardAutoCompleteSerializer
|
||||||
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
filter_backends = (DjangoFilterBackend, OrderingFilter)
|
||||||
filter_fields = ("submitter__username", )
|
filter_fields = ("submitter__username", )
|
||||||
@@ -56,6 +57,9 @@ class BoardAutoCompleteViewSet(
|
|||||||
ordering = ('-id', )
|
ordering = ('-id', )
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return filter_private_board(self.request, Board.objects.all())
|
||||||
|
|
||||||
|
|
||||||
class TagAutoCompleteViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
class TagAutoCompleteViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
||||||
queryset = Tag.objects.all()
|
queryset = Tag.objects.all()
|
||||||
@@ -74,6 +78,6 @@ class TagAutoCompleteViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
|||||||
drf_router = routers.DefaultRouter()
|
drf_router = routers.DefaultRouter()
|
||||||
drf_router.register(r'pins', PinViewSet, basename="pin")
|
drf_router.register(r'pins', PinViewSet, basename="pin")
|
||||||
drf_router.register(r'images', ImageViewSet)
|
drf_router.register(r'images', ImageViewSet)
|
||||||
drf_router.register(r'boards', BoardViewSet)
|
drf_router.register(r'boards', BoardViewSet, basename="board")
|
||||||
drf_router.register(r'tags-auto-complete', TagAutoCompleteViewSet)
|
drf_router.register(r'tags-auto-complete', TagAutoCompleteViewSet)
|
||||||
drf_router.register(r'boards-auto-complete', BoardAutoCompleteViewSet)
|
drf_router.register(r'boards-auto-complete', BoardAutoCompleteViewSet, base_name="board")
|
||||||
|
|||||||
Reference in New Issue
Block a user