mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-04-27 12:33:47 +03:00
Update permission to type
This commit is contained in:
parent
7c936d9565
commit
715fbbe1dd
|
@ -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():
|
||||||
|
|
|
@ -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"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user