From 715fbbe1dd1985f625b3bc357e5b80c7fea6cbb1 Mon Sep 17 00:00:00 2001 From: Olivia Rodriguez Valdes Date: Tue, 19 Feb 2019 13:02:06 -0500 Subject: [PATCH] Update permission to type --- graphene_django/tests/test_types.py | 2 +- graphene_django/types.py | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 2732781..c9245ae 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -257,7 +257,7 @@ def test_django_permissions(): 'reporter': ('content_type.permission3',), 'extra_field': ('content_type.permission3',), } - assert PermissionArticle._meta.field_permissions == expected + assert PermissionArticle.field_permissions == expected def test_permission_resolver(): diff --git a/graphene_django/types.py b/graphene_django/types.py index 17ba330..b969ae4 100644 --- a/graphene_django/types.py +++ b/graphene_django/types.py @@ -127,28 +127,35 @@ class DjangoObjectType(ObjectType): _meta=_meta, interfaces=interfaces, **options ) - permissions = field_to_permission if field_to_permission else {} + if cls.field_permissions: + cls.__set_as_nullable__(cls._meta.model, cls._meta.registry) + if not skip_registry: + registry.register(cls) + + @classmethod + def __set_permissions__(cls, field_to_permission, permission_to_field): + """Combines permissions from meta""" + permissions = field_to_permission if field_to_permission else {} if permission_to_field: - permissions.update(cls.__get_permission_to_fields__(permission_to_field)) + perm_to_field = cls.__get_permission_to_fields__(permission_to_field) + for field, perms in perm_to_field.items(): + if field in permissions: + permissions[field] += perms + else: + permissions[field] = perms cls.field_permissions = permissions for field_name, field_permissions in permissions.items(): attr = 'resolve_{}'.format(field_name) - resolver = getattr(_meta.fields[field_name], 'resolver', None) or getattr(cls, attr, None) + resolver = getattr(cls._meta.fields[field_name], 'resolver', None) or getattr(cls, attr, None) if not hasattr(field_permissions, '__iter__'): field_permissions = tuple(field_permissions) setattr(cls, attr, cls.set_auth_resolver(field_name, field_permissions, resolver)) - if permissions: - cls.__set_as_nullable__(model, registry) - - if not skip_registry: - registry.register(cls) - @classmethod def __set_as_nullable__(cls, model, registry): """Set restricted fields as nullable"""