1
votes

I made this custom Permission class that owner is related to django user model.and user model related to UserProfile model with related_name = "user_profile" in UserProfile model I have a BooleanField default is false.

ad_ac = models.BooleanField(default=False)

Im trying to write a custom permission class that tells if the request.user has ad_ac field True .can create or update from request. this is how get so far :

class OwnerAdPermission(permissions.BasePermission):
    ''' object lvl permission for Ad owner '''
    def has_object_permission(self, request, view, obj):
        if request.user.user_profile.ad_ac == True:
            return True
            return obj.owner == request.user
1

1 Answers

2
votes

after digging into stackoverflow I found my problem. the problem was so obvious i didnt define has_permission in my custom permission.so has_object_permission only works we have created object.for Creating new object we have to define has_permission.

class OwnerAdPermission(permissions.BasePermission):
    ''' object lvl permission for Ad owner '''
    def has_permission(self, request, view):
        if request.user.user_profile.ad_ac == True:
            return True

    def has_object_permission(self, request, view, obj):
        return obj.owner == request.user

so i chanded the has_permission to my own usage.