I have a permission_classes in modelviewset like this :
class MeetingViewSet(viewsets.ModelViewSet):
queryset = Meeting.objects.all()
serializer_class = MeetingSerializer
permission_classes =[IsOwner|IsCreator|IsInvited]
and this is the related model :
class Meeting(models.Model):
TIMEZONES = tuple(zip(pytz.all_timezones, pytz.all_timezones))
title = models.CharField(max_length=255)
description = models.TextField()
# Date Time Is in UTC
date_time = models.DateTimeField()
time_zone = models.CharField(max_length=32, choices=TIMEZONES,
default='UTC')
#TODO: Convert to REMOTE_USER, Temperory integer
host = models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
is_private = models.BooleanField(default=True)
is_virtual = models.BooleanField(default=True)
url = models.CharField(blank=True,max_length=100)
deleted = models.BooleanField(default=False)
time_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s' % (self.title)
# TODO: Return host.username after bringup REMOTE_USER
def is_invited(self, email):
meeting = MeetingMember.objects.filter(meeting=self, email=email)
if meeting.exists():
return True
return False
IsOwner is for the owner to update/delete/get/post and Iscreateor is for method post to create new object and IsInvited for method Get and invited users exististing in model :
class IsOwner(BasePermission):
def has_object_permission(self, request, view, object):
return request.user.pk == object.host and request.user.is_authenticated
class IsCreator(BasePermission):
def has_permission(self, request ,view):
return request.method == 'POST' and request.user.is_authenticated
class IsInvited(BasePermission):
message = 'you must have been invited to see this meeting'
def has_object_permission(self,request, view,object):
return request.method == 'GET' and object.is_invited(request.user.email) and request.user.is_authenticated
and user must be authenticated in all three classes but when i use simple jwt and authenticate with a different user i can still get objects created by another user which should be forbidden bcs only the owner can access the object what am i missing?