Update permission to type

This commit is contained in:
Olivia Rodriguez Valdes 2019-02-19 13:02:06 -05:00
parent 7c936d9565
commit 715fbbe1dd
2 changed files with 17 additions and 10 deletions

View File

@ -257,7 +257,7 @@ def test_django_permissions():
'reporter': ('content_type.permission3',), 'reporter': ('content_type.permission3',),
'extra_field': ('content_type.permission3',), 'extra_field': ('content_type.permission3',),
} }
assert PermissionArticle._meta.field_permissions == expected assert PermissionArticle.field_permissions == expected
def test_permission_resolver(): def test_permission_resolver():

View File

@ -127,28 +127,35 @@ class DjangoObjectType(ObjectType):
_meta=_meta, interfaces=interfaces, **options _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: 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 cls.field_permissions = permissions
for field_name, field_permissions in permissions.items(): for field_name, field_permissions in permissions.items():
attr = 'resolve_{}'.format(field_name) 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__'): if not hasattr(field_permissions, '__iter__'):
field_permissions = tuple(field_permissions) field_permissions = tuple(field_permissions)
setattr(cls, attr, cls.set_auth_resolver(field_name, field_permissions, resolver)) 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 @classmethod
def __set_as_nullable__(cls, model, registry): def __set_as_nullable__(cls, model, registry):
"""Set restricted fields as nullable""" """Set restricted fields as nullable"""