Wie kann ich überprüfen, ob der Benutzer die Berechtigung hat, zu sehen oder Abfrage etwas? Ich habe keine Ahnung, wie ich das machen soll.Wie überprüft man Berechtigungen und andere Bedingungen in der GraphQL-Abfrage?
- In
args
? Wie würde das überhaupt funktionieren? - In
resolve()
? Sehen Sie, ob der Benutzer die Erlaubnis hat und irgendwie einige der Argumente beseitigen/ändern?
Beispiel:
Wenn Benutzer "Besucher", so kann er nur öffentliche Beiträge sehen, "admin" kann alles sehen.
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()
}
}
}
}
})
aktualisieren - Mongoose Modell sieht wie folgt aus etwas:
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)
Wenn Sie Mongoose verwenden, ist es am einfachsten, die Überprüfungen in den Auflösungsfunktionen durchzuführen. Ich bin mit Mongoose nicht besonders vertraut, aber ich habe vor einiger Zeit ein Tutorial für GraphQL-Server geschrieben, das Mungo und SQLite verwendet. Es verwendet apolloServer anstelle von express-graphql. Es sieht ein bisschen anders aus, aber für Auflösungsfunktionen und Datenabruf ist alles ziemlich gleich. Sie finden es [hier] (https://medium.com/apollo-stack/tutorial-building-a-graphql-server-cddaa023c035). – helfer
Ja, Sie können entweder null zurückgeben oder einen Fehler ausgeben und GraphQL hört auf, in den Zweig der Abfrage zu gehen. Wenn Sie Berechtigungen anhand von Daten in der Datenbank prüfen müssen (z. B. Rollen oder etwas), können Sie Versprechungen verketten. Rufen Sie zuerst das Element und die mit dem Element verknüpften Berechtigungen ab. Wenn das zurückgegeben wird, überprüfen Sie, ob der Benutzer berechtigt ist. Wenn der Benutzer keine Berechtigung hat, wird der Fehler zurückgegeben oder null zurückgegeben. Wenn der Benutzer die Berechtigung hat, gib den Gegenstand (oder etwas Ähnliches) zurück. – helfer