From ad2342a08b680aef6154e09ed8307fab647dd459 Mon Sep 17 00:00:00 2001
From: Olivia Rodriguez Valdes <olicubalibre@gmail.com>
Date: Fri, 1 Mar 2019 12:40:54 -0500
Subject: [PATCH 1/3] Verify there is a viewer on context

---
 graphene_django/utils.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/graphene_django/utils.py b/graphene_django/utils.py
index 55581c4..f4800eb 100644
--- a/graphene_django/utils.py
+++ b/graphene_django/utils.py
@@ -122,7 +122,10 @@ def auth_resolver(parent_resolver, permissions, raise_exception, root, info, **a
     :return: Resolved field. None if the viewer does not have permission to access the field.
     """
     # Get viewer from context
+    if not hasattr(info.context, 'user'):
+        raise PermissionDenied()
     user = info.context.user
+
     if has_permissions(user, permissions):
         if parent_resolver:
             # A resolver is provided in the class

From 76cbad1fb21530ad081c73f7a64c0b95dcc935e1 Mon Sep 17 00:00:00 2001
From: Olivia Rodriguez Valdes <olicubalibre@gmail.com>
Date: Fri, 1 Mar 2019 12:42:29 -0500
Subject: [PATCH 2/3] Change DjangoField to PermissionField

---
 graphene_django/fields.py            | 4 ++--
 graphene_django/tests/test_fields.py | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/graphene_django/fields.py b/graphene_django/fields.py
index 1bfd33a..25eb419 100644
--- a/graphene_django/fields.py
+++ b/graphene_django/fields.py
@@ -154,12 +154,12 @@ class DjangoConnectionField(ConnectionField):
         )
 
 
-class DjangoField(Field):
+class PermissionField(Field):
     """Class to manage permission for fields"""
 
     def __init__(self, type, permissions, permissions_resolver=auth_resolver, *args, **kwargs):
         """Get permissions to access a field"""
-        super(DjangoField, self).__init__(type, *args, **kwargs)
+        super(PermissionField, self).__init__(type, *args, **kwargs)
         self.permissions = permissions
         self.permissions_resolver = permissions_resolver
 
diff --git a/graphene_django/tests/test_fields.py b/graphene_django/tests/test_fields.py
index 95ccb64..23cce7f 100644
--- a/graphene_django/tests/test_fields.py
+++ b/graphene_django/tests/test_fields.py
@@ -1,6 +1,6 @@
 from unittest import TestCase
 from django.core.exceptions import PermissionDenied
-from graphene_django.fields import DjangoField
+from graphene_django.fields import PermissionField
 
 
 class MyInstance(object):
@@ -10,11 +10,11 @@ class MyInstance(object):
         return "resolver method"
 
 
-class DjangoPermissionFieldTests(TestCase):
+class PermissionFieldTests(TestCase):
 
     def test_permission_field(self):
         MyType = object()
-        field = DjangoField(MyType, permissions=['perm1', 'perm2'], source='resolver')
+        field = PermissionField(MyType, permissions=['perm1', 'perm2'], source='resolver')
         resolver = field.get_resolver(None)
 
         class Viewer(object):
@@ -30,7 +30,7 @@ class DjangoPermissionFieldTests(TestCase):
 
     def test_permission_field_without_permission(self):
         MyType = object()
-        field = DjangoField(MyType, permissions=['perm1', 'perm2'], source='resolver')
+        field = PermissionField(MyType, permissions=['perm1', 'perm2'], source='resolver')
         resolver = field.get_resolver(field.resolver)
 
         class Viewer(object):

From 8912175cc5393be4619513b78be9cc8458813da3 Mon Sep 17 00:00:00 2001
From: Olivia Rodriguez Valdes <olicubalibre@gmail.com>
Date: Fri, 1 Mar 2019 12:44:52 -0500
Subject: [PATCH 3/3] Set permissions as optional

---
 graphene_django/fields.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/graphene_django/fields.py b/graphene_django/fields.py
index 25eb419..bbf1940 100644
--- a/graphene_django/fields.py
+++ b/graphene_django/fields.py
@@ -157,7 +157,7 @@ class DjangoConnectionField(ConnectionField):
 class PermissionField(Field):
     """Class to manage permission for fields"""
 
-    def __init__(self, type, permissions, permissions_resolver=auth_resolver, *args, **kwargs):
+    def __init__(self, type, permissions=(), permissions_resolver=auth_resolver, *args, **kwargs):
         """Get permissions to access a field"""
         super(PermissionField, self).__init__(type, *args, **kwargs)
         self.permissions = permissions
@@ -165,5 +165,7 @@ class PermissionField(Field):
 
     def get_resolver(self, parent_resolver):
         """Intercept resolver to analyse permissions"""
-        return partial(get_unbound_function(self.permissions_resolver), self.resolver or parent_resolver,
-                       self.permissions, True)
+        parent_resolver = super(PermissionField, self).get_resolver(parent_resolver)
+        if self.permissions:
+            return partial(get_unbound_function(self.permissions_resolver), parent_resolver, self.permissions, True)
+        return parent_resolver