コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
 def resolver_with_context(attname, default_value, root: ChannelContext,
                           info, **args):
     resolver = get_default_resolver()
     return resolver(attname, default_value, root.node, info, **args)
コード例 #4
0
ファイル: types.py プロジェクト: keenangraham/encoded-graphql
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)