您如何记录某些集合只能由具有相同权限/角色的用户访问或更改,例如,只有经过身份验证的用户才能撰写评论?
答案 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解析器中,您将获取与该用户关联的数据,其中一个字段可能是用户的权限。然后,将相关道具传递给前端框架并渲染与该人相关的任何内容。在您指定的情况下,如果用户缺少一定级别的身份验证,您可能会省略呈现注释框。