GraphQL权限文档

时间:2017-08-23 14:14:55

标签: graphql graphql-js graphql-java

您如何记录某些集合只能由具有相同权限/角色的用户访问或更改,例如,只有经过身份验证的用户才能撰写评论?

2 个答案:

答案 0 :(得分:2)

从graphql-java v4.0开始,可以轻松过滤模式以获得操作可见性。这样,您可以根据每个用户的访问权限为每个用户提供不同的架构,并且用户只能看到他们可以实际执行的操作。所以整个事情变得精美自我记录。

看起来像是:

//create an implementation that limits certain operations based on their name
//you can also provide a completely custom implementation
GraphqlFieldVisibility blockedFields = BlockedFields.newBlock()
                .addPattern("Character.id")
                .addPattern("Droid.appearsIn")
                .addPattern(".*\\.hero") // it uses regular expressions
                .build();

//create a role-specific schema based on the global one
GraphQLSchema schema = GraphQLSchema.newSchema(globalSchema)
                .fieldVisibility(blockedFields) //apply restrictions for this user
                .build();

从现有创建新架构是一项非常便宜的操作。然后,您可以在会话中保留特定于用户/角色的架构。即使在每个请求上重新创建一个也没什么大不了的。

答案 1 :(得分:1)

将graphql中的数据视为从根本上依赖于查看者是有益的。

在后端建立登录用户,然后根据当前用户呈现前端代码。

因此,在graphql解析器中,您将获取与该用户关联的数据,其中一个字段可能是用户的权限。然后,将相关道具传递给前端框架并渲染与该人相关的任何内容。在您指定的情况下,如果用户缺少一定级别的身份验证,您可能会省略呈现注释框。