diff --git a/djangoldp/permissions.py b/djangoldp/permissions.py
index 8ee9a441d1972e2083d84cd93df5fec4041868a1..04502e21a86f4c95c88081d169bddab1f1380fc0 100644
--- a/djangoldp/permissions.py
+++ b/djangoldp/permissions.py
@@ -27,22 +27,11 @@ class WACPermissions(permissions.DjangoObjectPermissions):
         'DELETE': ['%(app_label)s.delete_%(model_name)s'],
     }
 
-    # All LDP permissions must extnd WACPermissions. Otherwise there
-    # will be problems when view is nons.
-
     def has_permission(self, request, view):
         if request.method == 'OPTIONS':
             return True
-        elif view:
-            return super().has_permission(request, view)
         else:
-            return False
-
-    def has_object_permission(self, request, view, obj):
-        if view:
-            return super().has_object_permission(request, view, obj)
-        else:
-            return False
+            return super().has_permission(request, view)
 
 
 class ObjectFilter(filters.BaseFilterBackend):
@@ -85,20 +74,20 @@ class AnonymousReadOnly(WACPermissions):
         Author: can read all posts + create new posts + update their own
     """
     def has_permission(self, request, view):
-        if request.method == "GET":
+        if view.action in ['list', 'retrieve']:
             return True
         else:
             return super().has_permission(request, view)
-        return False
 
     def has_object_permission(self, request, view, obj):
-        if request.method == "GET":
+        if view.action == "create" and request.user.is_authenticated():
             return True
-        elif request.method == "POST" and request.user.is_authenticated():
+        elif view.action == "retrieve":
             return True
-        elif request.method in ('PUT', 'PATCH'):
+        elif view.action in ['update', 'partial_update', 'destroy']:
             if hasattr(obj._meta, 'auto_author'):
                 author = getattr(obj, obj._meta.auto_author)
                 if author == request.user:
                     return True
-        return False
\ No newline at end of file
+        else:
+            return super().has_object_permission(request, view, obj)
\ No newline at end of file
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 9ea4d717bc61a918e765b692f20b18ca7d6373ea..5d61766e62a08dfa654299f4eda6cb5ef1ecd870 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -200,24 +200,25 @@ class LDPSerializer(HyperlinkedModelSerializer):
                                get_perms(self.context['request'].user, obj)]
 
         if hasattr(obj._meta, 'permission_classes'):
+            currentView = self.context['view']
             currentRequest = self.context['request']
             permList = obj._meta.permission_classes
             if permList:
                 for perm in permList:
                     if issubclass (perm, permissions.WACPermissions):
-                        allowed = perm.has_permission(perm, currentRequest, None)
+                        allowed = perm.has_permission(perm, currentRequest, currentView)
 
-                        if allowed:
-                            allowed = perm.has_object_permission(perm, currentRequest, None, obj)
-
-                        if allowed and currentRequest.method == 'GET':
+                        if allowed and currentView.action == 'list' or currentView.action == 'retrieve':
                             data['permissions'] += [{'mode': {'@type': 'view'}}]
-                        elif allowed and currentRequest.method == 'POST':
-                            data['permissions'] += [{'mode': {'@type': 'add'}}]
-                        elif allowed and currentRequest.method == 'PUT':
-                            data['permissions'] += [{'mode': {'@type': 'change'}}]
-                        elif allowed and currentRequest.method == 'PATCH':
-                            data['permissions'] += [{'mode': {'@type': 'change'}}]
+                        elif allowed and currentView.action == 'create':
+                            if perm.has_object_permission(perm, currentRequest, currentView, obj):
+                                data['permissions'] += [{'mode': {'@type': 'add'}}]
+                        elif allowed and currentView.action == 'update':
+                            if perm.has_object_permission(perm, currentRequest, currentView, obj):
+                                data['permissions'] += [{'mode': {'@type': 'change'}}]
+                        elif allowed and currentView.action == 'partial_update':
+                            if perm.has_object_permission(perm, currentRequest, currentView, obj):
+                                data['permissions'] += [{'mode': {'@type': 'change'}}]
 
         if hasattr(obj._meta, 'rdf_context'):
             data['@context'] = obj._meta.rdf_context