Reputation: 254
I tried setting up GraphQL with strapi and policies to limit user access. Normal API call gives us user info in ctx.state.user
, but while using GraphQL this object is undefined inside api policies. Although I am able to access ctx.state.user
inside api controller.
'use strict'; /** * `hasViewPermissions` policy. */ module.exports = async (ctx, next) => { console.log(ctx.state.user);// Undefined await next(); };
schema.graphql for api
module.exports = {
resolver: {
Query: {
posts: {
description: 'Return a list of posts',
policy: [
'hasViewPermissions',
],
resolver: 'Posts.find'
},
}
},
};
Node Version: v11.6.0
Strapi: 3.0.0-alpha.24.1
Thanks
Upvotes: 0
Views: 859
Reputation: 1439
try in your controller or revolver:
if (!ctx.state && ctx.request && ctx.request.header && ctx.request.header.authorization) {
const { id } = await strapi.plugins["users-permissions"].services.jwt.getToken(ctx);
ctx.state.user = await strapi.plugins['users-permissions'].services.user.fetchAuthenticatedUser(id);
}
check that ctx is {context}
look: Strapi: GraphQL ctx.state is undefined
Upvotes: 1
Reputation: 725
Try adding 'plugins.users-permissions.permissions' for the policies.
module.exports = {
resolver: {
Query: {
posts: {
description: 'Return a list of posts',
policies: [
'plugins.users-permissions.permissions', <---
'hasViewPermissions',
],
resolver: 'Posts.find'
},
}
},
};
Upvotes: 0