ユーザーがへのアクセス許可を持っているかどうかを確認するには、またはクエリを参照してください。私はこれをどうやって行うのか分かりません。 args
でGraphQLクエリの権限とその他の条件をチェックする方法は?
- ?それはどのように働くでしょうか?
resolve()
?ユーザーに権限があるかどうか確認してください。 argsの一部を削除/変更しますか?
例:
ユーザーは "訪問者" であれば、彼は唯一の公共の投稿を見ることができ、 "管理者" のすべてを見ることができます。
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()
}
}
}
}
})
更新 - マングースモデルは次のようになります。
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)
Mongooseを使用している場合は、解決機能のチェックを行うのが最も簡単です。私はMongooseをよく知っているわけではありませんが、もう少し前にMongooseとSQLiteを使ったGraphQLサーバチュートリアルを書いています。 express-graphqlの代わりにapolloServerを使用します。これは少し違って見えますが、解決関数とデータフェッチの場合、すべてがほぼ同じです。 [こちら](https://medium.com/apollo-stack/tutorial-building-a-graphql-server-cdda023c035)にあります。 – helfer
ええ、あなたはnullを返すか、エラーを投げることができ、GraphQLはそのクエリの分岐を停止します。データベース内の項目(ロールなど)に基づいて権限をチェックする必要がある場合は、約束を結ぶことができます。最初にアイテムとそのアイテムに関連する権限を取得し、それが返されたときにユーザが権限を持っているかどうかをチェックします。ユーザーに権限がない場合は、エラーをスローするか、nullを返します。ユーザーに許可がある場合は、アイテム(またはそのようなもの)を返します。 – helfer