我正在使用一个简单的Strapi策略(如下所示)来限制仅属于所有者的REST结果,该结果记录在以下链接中。
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,但它们似乎都不适合Graphql查询。 URL以“ {http://localhost:1337/graphql”结尾,而“ ctx.request.query”为空[]。
https://strapi.io/documentation/3.0.0-beta.x/guides/requests.html#api-reference
答案 0 :(得分:0)
为什么在搜索graphQL问题时正在查看REST文档?根本没有URL查询解析。
所有者角色(权限)可以使用政策进行检查-其描述为here。
以下各节包含其他权限/自定义的示例-解析程序具有context
参数。用户数据应该(未检查)在context.state.user
上。
答案 1 :(得分:0)
这是我为解决该问题所做的事情:
覆盖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过滤器。 希望对您有所帮助。