api permission fixes + shopping list default view mode

This commit is contained in:
vabene1111 2021-01-26 22:15:09 +01:00
parent b698fad83a
commit a0ebc47ade
2 changed files with 39 additions and 40 deletions

View File

@ -363,7 +363,7 @@
data: { data: {
shopping_list_id: {% if shopping_list_id %}{{ shopping_list_id }}{% else %}null{% endif %}, shopping_list_id: {% if shopping_list_id %}{{ shopping_list_id }}{% else %}null{% endif %},
loading: true, loading: true,
edit_mode: true, edit_mode: false,
export_text_prefix: '', //TODO add userpreference export_text_prefix: '', //TODO add userpreference
recipe_query: '', recipe_query: '',
recipes: [], recipes: [],

View File

@ -55,6 +55,31 @@ from cookbook.serializer import (FoodSerializer, IngredientSerializer,
from recipes.settings import DEMO from recipes.settings import DEMO
class StandardFilterMixin(ViewSetMixin):
def get_queryset(self):
queryset = self.queryset
query = self.request.query_params.get('query', None)
if query is not None:
queryset = queryset.filter(name__icontains=query)
updated_at = self.request.query_params.get('updated_at', None)
if updated_at is not None:
try:
queryset = queryset.filter(updated_at__gte=updated_at)
except FieldError:
pass
limit = self.request.query_params.get('limit', None)
random = self.request.query_params.get('random', False)
if limit is not None:
if random:
queryset = queryset.random(int(limit))
else:
queryset = queryset[:int(limit)]
return queryset
class UserNameViewSet(viewsets.ReadOnlyModelViewSet): class UserNameViewSet(viewsets.ReadOnlyModelViewSet):
""" """
list: list:
@ -116,31 +141,6 @@ class SyncLogViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = [CustomIsAdmin, ] permission_classes = [CustomIsAdmin, ]
class StandardFilterMixin(ViewSetMixin):
def get_queryset(self):
queryset = self.queryset
query = self.request.query_params.get('query', None)
if query is not None:
queryset = queryset.filter(name__icontains=query)
updated_at = self.request.query_params.get('updated_at', None)
if updated_at is not None:
try:
queryset = queryset.filter(updated_at__gte=updated_at)
except FieldError:
pass
limit = self.request.query_params.get('limit', None)
random = self.request.query_params.get('random', False)
if limit is not None:
if random:
queryset = queryset.random(int(limit))
else:
queryset = queryset[:int(limit)]
return queryset
class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin): class SupermarketViewSet(viewsets.ModelViewSet, StandardFilterMixin):
queryset = Supermarket.objects.all() queryset = Supermarket.objects.all()
serializer_class = SupermarketSerializer serializer_class = SupermarketSerializer
@ -188,7 +188,7 @@ class RecipeBookViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet): class RecipeBookEntryViewSet(viewsets.ModelViewSet, viewsets.GenericViewSet):
queryset = RecipeBookEntry.objects.all() queryset = RecipeBookEntry.objects.all()
serializer_class = RecipeBookEntrySerializer serializer_class = RecipeBookEntrySerializer
permission_classes = [CustomIsOwner, CustomIsAdmin] permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
if self.request.user.is_superuser: if self.request.user.is_superuser:
@ -207,7 +207,7 @@ class MealPlanViewSet(viewsets.ModelViewSet):
""" """
queryset = MealPlan.objects.all() queryset = MealPlan.objects.all()
serializer_class = MealPlanSerializer serializer_class = MealPlanSerializer
permission_classes = [permissions.IsAuthenticated] # TODO fix permissions permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
queryset = MealPlan.objects.filter( queryset = MealPlan.objects.filter(
@ -232,11 +232,10 @@ class MealTypeViewSet(viewsets.ModelViewSet):
""" """
queryset = MealType.objects.order_by('order').all() queryset = MealType.objects.order_by('order').all()
serializer_class = MealTypeSerializer serializer_class = MealTypeSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
queryset = MealType.objects.order_by('order', 'id') \ queryset = MealType.objects.order_by('order', 'id').filter(created_by=self.request.user).all()
.filter(created_by=self.request.user).all()
return queryset return queryset
@ -317,17 +316,19 @@ class RecipeViewSet(viewsets.ModelViewSet, StandardFilterMixin):
class ShoppingListRecipeViewSet(viewsets.ModelViewSet): class ShoppingListRecipeViewSet(viewsets.ModelViewSet):
queryset = ShoppingListRecipe.objects.all() queryset = ShoppingListRecipe.objects.all()
serializer_class = ShoppingListRecipeSerializer serializer_class = ShoppingListRecipeSerializer
permission_classes = [CustomIsUser, ] # TODO add custom validation permission_classes = [CustomIsOwner, ]
# TODO custom get qs def get_queryset(self):
return self.queryset.filter(shoppinglist__created_by=self.request.user).all()
class ShoppingListEntryViewSet(viewsets.ModelViewSet): class ShoppingListEntryViewSet(viewsets.ModelViewSet):
queryset = ShoppingListEntry.objects.all() queryset = ShoppingListEntry.objects.all()
serializer_class = ShoppingListEntrySerializer serializer_class = ShoppingListEntrySerializer
permission_classes = [CustomIsOwner, ] # TODO add custom validation permission_classes = [CustomIsOwner, ]
# TODO custom get qs def get_queryset(self):
return self.queryset.filter(shoppinglist__created_by=self.request.user).all()
class ShoppingListViewSet(viewsets.ModelViewSet): class ShoppingListViewSet(viewsets.ModelViewSet):
@ -352,12 +353,10 @@ class ShoppingListViewSet(viewsets.ModelViewSet):
class ViewLogViewSet(viewsets.ModelViewSet): class ViewLogViewSet(viewsets.ModelViewSet):
queryset = ViewLog.objects.all() queryset = ViewLog.objects.all()
serializer_class = ViewLogSerializer serializer_class = ViewLogSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
queryset = ViewLog.objects \ return CookLog.objects.filter(created_by=self.request.user).all()[:5]
.filter(created_by=self.request.user).all()[:5]
return queryset
class CookLogViewSet(viewsets.ModelViewSet): class CookLogViewSet(viewsets.ModelViewSet):
@ -366,7 +365,7 @@ class CookLogViewSet(viewsets.ModelViewSet):
permission_classes = [CustomIsOwner] permission_classes = [CustomIsOwner]
def get_queryset(self): def get_queryset(self):
queryset = ViewLog.objects.filter(created_by=self.request.user).all()[:5] queryset = CookLog.objects.filter(created_by=self.request.user).all()[:5]
return queryset return queryset