mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-12-11 04:04:21 +03:00
45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
from functools import wraps
|
|
from django.core.exceptions import PermissionDenied
|
|
from ..fields import DjangoConnectionField
|
|
|
|
from .utils import has_perm
|
|
|
|
|
|
def node_require_permission(permissions):
|
|
def require_permission_decorator(func):
|
|
@wraps(func)
|
|
def func_wrapper(cls, info, id):
|
|
if has_perm(permissions=permissions, context=info.context):
|
|
return func(cls, info, id)
|
|
raise PermissionDenied('Permission Denied')
|
|
return func_wrapper
|
|
return require_permission_decorator
|
|
|
|
|
|
def mutation_require_permission(permissions):
|
|
def require_permission_decorator(func):
|
|
@wraps(func)
|
|
def func_wrapper(cls, root, info, **input):
|
|
if has_perm(permissions=permissions, context=info.context):
|
|
return func(cls, root, info, **input)
|
|
return cls(errors=PermissionDenied('Permission Denied'))
|
|
return func_wrapper
|
|
return require_permission_decorator
|
|
|
|
|
|
def connection_require_permission(permissions):
|
|
def require_permission_decorator(func):
|
|
@wraps(func)
|
|
def func_wrapper(
|
|
cls, resolver, connection, default_manager, max_limit,
|
|
enforce_first_or_last, root, info, **args):
|
|
if has_perm(permissions=permissions, context=info.context):
|
|
return func(
|
|
cls, resolver, connection, default_manager, max_limit,
|
|
enforce_first_or_last, root, info, **args)
|
|
return DjangoConnectionField.connection_resolver(
|
|
resolver, connection, [PermissionDenied('Permission Denied'), ], max_limit,
|
|
enforce_first_or_last, root, info, **args)
|
|
return func_wrapper
|
|
return require_permission_decorator
|