限制属于 Strapi 所有者的 Graphql 结果
Limit Graphql results that belongs to owner in Strapi
我正在使用如下所示的简单 Strapi 策略来限制仅属于所有者的 REST 结果,其记录在以下 link.
https://github.com/strapi/strapi/issues/624
module.exports = async (ctx, next) => {
const { id, role } = ctx.state.user;
if(role !== 'administrator'){
ctx.query.owner = id;
}
await next();
};
现在我想对 Graphql 结果执行相同的操作,但它似乎无法使用相同的代码,因为 "ctx.query" 未定义。我已经尝试查看所有请求 API,但其中 none 似乎适用于 Graphql 查询。 URL 以 'http://localhost:1337/graphql' 结尾,而 'ctx.request.query' 是一个空的 [].
https://strapi.io/documentation/3.0.0-beta.x/guides/requests.html#api-reference
你为什么在搜索 graphQL 问题的同时查看 REST 文档?根本没有 url 查询解析。
可以使用策略检查所有者角色(权限)- here 对此进行了描述。
以下部分包含杂项示例 permission/customization - 解析器有一个 context
参数。用户数据应该(未检查)在 context.state.user
.
处可用
这是我为解决该问题所做的工作:
覆盖 api/activity/config/schema.graphql
中的 GraphQl 模式
module.exports = {
definition: ``,
query: `
notifications(sort: String, limit: Int, start: Int, where: JSON): [Activity]
`,
type: {},
resolver: {
Query: {
notifications: {
description: 'Return the auth user notifications',
policies: ['plugins.users-permissions.permissions'],
resolver: 'Activity.findNotifications'
},
},
},
};
在 api/activity/controllers/Activity.js
中创建一个新的函数解析器
module.exports = {
findNotifications(ctx) {
ctx.query = { ...ctx.query, owner: ctx.state.user.id }
if (ctx.query._q) {
return strapi.services.activity.search(ctx.query);
}
return strapi.services.activity.find(ctx.query);
},
}
在控制器中,您获得了查询并添加了所有者 ID 过滤器。
希望对你有帮助。
我正在使用如下所示的简单 Strapi 策略来限制仅属于所有者的 REST 结果,其记录在以下 link.
https://github.com/strapi/strapi/issues/624
module.exports = async (ctx, next) => {
const { id, role } = ctx.state.user;
if(role !== 'administrator'){
ctx.query.owner = id;
}
await next();
};
现在我想对 Graphql 结果执行相同的操作,但它似乎无法使用相同的代码,因为 "ctx.query" 未定义。我已经尝试查看所有请求 API,但其中 none 似乎适用于 Graphql 查询。 URL 以 'http://localhost:1337/graphql' 结尾,而 'ctx.request.query' 是一个空的 [].
https://strapi.io/documentation/3.0.0-beta.x/guides/requests.html#api-reference
你为什么在搜索 graphQL 问题的同时查看 REST 文档?根本没有 url 查询解析。
可以使用策略检查所有者角色(权限)- here 对此进行了描述。
以下部分包含杂项示例 permission/customization - 解析器有一个 context
参数。用户数据应该(未检查)在 context.state.user
.
这是我为解决该问题所做的工作:
覆盖 api/activity/config/schema.graphql
module.exports = {
definition: ``,
query: `
notifications(sort: String, limit: Int, start: Int, where: JSON): [Activity]
`,
type: {},
resolver: {
Query: {
notifications: {
description: 'Return the auth user notifications',
policies: ['plugins.users-permissions.permissions'],
resolver: 'Activity.findNotifications'
},
},
},
};
在 api/activity/controllers/Activity.js
module.exports = {
findNotifications(ctx) {
ctx.query = { ...ctx.query, owner: ctx.state.user.id }
if (ctx.query._q) {
return strapi.services.activity.search(ctx.query);
}
return strapi.services.activity.find(ctx.query);
},
}
在控制器中,您获得了查询并添加了所有者 ID 过滤器。 希望对你有帮助。