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 协议》,转载必须注明作者和本文链接
关于错误码,可以定义如下异常类,在业务中抛出异常
throw new Exception($message, $code);
响应错误中包含错误码