GraphQL如何处理权限和异常问题?
最近学习了一下GraphQL,借鉴lighthouse实现了GraphqQL Server,简单查询可以通过db或model指令处理,复杂查询通过自定义resolver处理。
例如:从数据库获取一条记录
getArticleByDb(
id: Int! @eq
): CmsArticle
@db(name: "cms_article")
@where(value: { status: 1 })
@find

通过模型获取记录,查询条件由输入进行控制
getArticleByDb(
id: Int! @eq
status: Int = 1
): CmsArticle
@model(name: "\\app\\cms\\model\\admin\\ArticleModel")
@where(value: { status: ["=", "$status"] })
@find

通过defer指令解决n+1问题
type CmsArticle {
id: Int!
category_id: Int!
title: String!
description: String!
content: String!
user_id: Int!
status: Int!
created_at_txt: String! @alias(key: created_at) @date(formatter: "Y-m-d H:i:s")
category: CmsCategory @defer(resolver: "\\app\\graphql\\loaders\\Cms::getCategoryById", keys: "category_id")
}
遇到的问题
- 权限问题
目前通过@auth(role: true)指令表示需要验证角色,后台为角色配置权限。
没有权限抛出异常type CmsArticle { ... title: String! @auth(role: true) 无权限则抛出异常 # title: String! @auth(role: true, default: "") # 无权限则显示默认值 ... }
请问各位佬有没有其他更好的处理方式? - 如何处理错误码问题?
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
关于错误码,可以定义如下异常类,在业务中抛出异常
throw new Exception($message, $code);响应错误中包含错误码