指令

此页面描述了如何在 OGM 中使用指令以及哪些指令被排除。

@private

@private 指令允许指定哪些字段只能通过 OGM 访问。当需要隐藏诸如密码之类的字段时,这是一个有用的功能。

定义

"""Instructs @neo4j/graphql to only expose a field through the Neo4j GraphQL OGM."""
directive @private on FIELD_DEFINITION

用法

给定以下类型定义

type User {
    username: String!
    email: String!
    password: String! @private
}

在您的应用程序中,您可能希望散列密码并将其隐藏在公众视野之外。这可以通过使用 OGM 的自定义解析器来完成,以更新和设置密码。

当您想要使用相同的类型定义来驱动面向公众的模式和 OGM 时,这种情况变得更加明显。例如

import { Neo4jGraphQL } from "@neo4j/graphql";
import { OGM } from "@neo4j/graphql-ogm";
import neo4j from "neo4j-driver";

const driver = neo4j.driver(
    "bolt://localhost:7687",
    neo4j.auth.basic("username", "password")
);

const typeDefs = `
    type User {
        username: String!
        email: String!
        password: String! @private
    }
`;

// public without password
const neoSchema = new Neo4jGraphQL({ typeDefs, driver });

// private with access to password
const ogm = new OGM({ typeDefs, driver });

Promise.all([neoSchema.getSchema(), ogm.init()]).then(([schema]) => {
    const apolloServer = new ApolloServer({ schema });
})

排除的指令

以下指令已从 OGM 的模式中排除

  • @authentication

  • @authorization

  • @subscriptionsAuthorization

  • @query

  • @mutation

  • @subscription

  • @filterable

  • @selectable

  • @settable

原因是 OGM 仅在以编程方式使用时才会使用,而不是需要这些安全措施的公开 API。有关更多信息,请参阅关于Neo4j GraphQL 指令的页面。