您如何记录某些集合只能由具有相同权限/角色的用户访问或更改,例如只有经过身份验证的用户才能写评论?
问问题
400 次
2 回答
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();
从现有架构创建新架构是一项非常便宜的操作。例如,您可以在会话中保留特定于用户/角色的架构。甚至在每个请求上重新创建一个也没什么大不了的。
于 2017-09-04T09:40:05.607 回答
1
将 graphql 中的数据视为从根本上依赖于查看器是很有启发性的。
在您的后端建立一个登录用户,然后将前端代码呈现为当前用户的函数。
因此,在您的 graphql 解析器中,您将获取与该用户关联的数据,并且其中一个字段可能是用户的权限。然后,您将相关的道具传递给您的前端框架并呈现与该人相关的任何内容。在您指定的情况下,如果用户缺少一定级别的身份验证,您可能会省略呈现评论框。
于 2017-08-23T23:56:54.217 回答