def permission_controlled_default_resolver(attname, default_value, root, info, **kwargs): if can_access_field(root, info, **kwargs): return get_default_resolver()(attname, default_value, root, info, **kwargs) return None
def auth_resolver( parent_resolver, permissions, attname, default_value, raise_exception, root, info, **args ): """ Middleware resolver to check viewer's permissions :param parent_resolver: Field resolver :param permissions: Field permissions :param attname: Field name :param default_value: Default value to field if no resolver is provided :param raise_exception: If True a PermissionDenied is raised :param root: Schema root :param info: Schema info :param args: Schema args :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 permission_classes = args.pop("permission_classes", None) if has_permissions(user, permissions) and ( not permission_classes or all( ( perm.has_permission(user=user, instance=root, **args) for perm in permission_classes ) ) ): if parent_resolver: # A resolver is provided in the class return resolve_bound_resolver(parent_resolver, root, info, **args) # Get default resolver return get_default_resolver()(attname, default_value, root, info, **args) elif raise_exception: raise PermissionDenied() return None
def resolver_with_context(attname, default_value, root: ChannelContext, info, **args): resolver = get_default_resolver() return resolver(attname, default_value, root.node, info, **args)
def key_aware_resolver(attname, default_value, root, info, **args): resolver = get_default_resolver() attname = graphql_key_to_schema_key.get(attname, attname) return resolver(attname, default_value, root, info, **args)