0

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

4

2 回答 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 回答