Come posso verificare se l'utente ha l'autorizzazione per vedere o query qualcosa? Non ho idea di come farlo.Come verificare le autorizzazioni e le altre condizioni nella query GraphQL?
- In
args
? Come funzionerebbe? - In
resolve()
? Vedi se l'utente ha il permesso e in qualche modo eliminare/modificare alcuni degli argomenti?
Esempio:
Se l'utente è "visitatore", può vedere solo i messaggi pubblici, "admin" può vedere tutto.
const userRole = 'admin'; // Let's say this could be "admin" or "visitor"
const Query = new GraphQLObjectType({
name: 'Query',
fields:() => {
return {
posts: {
type: new GraphQLList(Post),
args: {
id: {
type: GraphQLString
},
title: {
type: GraphQLString
},
content: {
type: GraphQLString
},
status: {
type: GraphQLInt // 0 means "private", 1 means "public"
},
},
// MongoDB/Mongoose magic happens here
resolve(root, args) {
return PostModel.find(args).exec()
}
}
}
}
})
Aggiornamento - modello Mongoose simile a questa:
import mongoose from 'mongoose'
const postSchema = new mongoose.Schema({
title: {
type: String
},
content: {
type: String
},
author: {
type: mongoose.Schema.Types.ObjectId, // From user model/collection
ref: 'User'
},
date: {
type: Date,
default: Date.now
},
status: {
type: Number,
default: 0 // 0 -> "private", 1 -> "public"
},
})
export default mongoose.model('Post', postSchema)
Se si utilizza Mangusta, è più semplice eseguire i controlli nelle funzioni di risoluzione. Non ho molta familiarità con Mongoose, ma ho scritto un tutorial per server GraphQL che usa Mongoose e SQLite qualche tempo fa. Usa apolloServer al posto di express-graphql. Sembra un po 'diverso, ma per risolvere le funzioni e il recupero dei dati tutto è praticamente lo stesso. Puoi trovarlo [qui] (https://medium.com/apollo-stack/tutorial-building-a-graphql-server-cddaa023c035). – helfer
Sì, è possibile restituire null o lanciare un errore e GraphQL smetterà di andare giù per quel ramo della query. Se è necessario verificare le autorizzazioni in base a elementi nel database (ad esempio ruoli o qualcosa), è possibile concatenare le promesse. Prima recupera l'elemento e le autorizzazioni relative all'elemento, quindi quando viene restituito controlla se l'utente ha l'autorizzazione. Se l'utente non dispone dell'autorizzazione, genera un errore o restituisce null. Se l'utente ha il permesso, restituire l'oggetto (o qualcosa del genere). – helfer