Nosql 是否有办法在FaunaDB+;GraphQL?

Nosql 是否有办法在FaunaDB+;GraphQL?,nosql,graphql,authorization,faunadb,Nosql,Graphql,Authorization,Faunadb,我很难找到向所有人隐藏用户电子邮件的方法,但所有者除外(用户只能访问他的电子邮件)。对于特定角色,是否有隐藏特定文档字段的方法 下面是我发现的一个示例,它创建了一个可以动态访问整个用户集合的角色: CreateRole({ name: "tier1_role", membership: { resource: Collection("User"), predicate: Query( Lambda("userRef", // User attr

我很难找到向所有人隐藏用户电子邮件的方法,但所有者除外(用户只能访问他的电子邮件)。对于特定角色,是否有隐藏特定文档字段的方法

下面是我发现的一个示例,它创建了一个可以动态访问整个
用户
集合的角色:

CreateRole({
  name: "tier1_role",
  membership: {
    resource: Collection("User"),
    predicate: Query(
      Lambda("userRef",
        // User attribute based rule:
        // It grants access only if the User has TIER1 role.
        // If so, further rules specified in the privileges
        // section are applied next.
        Equals(Select(["data", "role"], Get(Var("userRef"))), "TIER1")
      )
    )
  },
  privileges: [
    {
      // Note: 'allUsers' Index is used to retrieve the
      // documents from the File collection. Therefore,
      // read access to the Index is required here as well.
      resource: Index("allUsers"),
      actions: { read: true }
    }
  ]
})
我试图改变一下,但无法设置字段级访问

假设我用下面的GraphQL模式设置了FaunaDB

enum UserRole {
  TIER1
}

type User {
  email: String! @unique
  username: String! @unique
  role: UserRole!
}

type Query {
  allUsers: [User!]
}

type Mutation {
  addUsers(new_users: [UserInput]): [User]
    @resolver(name: "add_users", paginated: false)
}
如何创建FaunaDB角色,使
alluser
query生成的数组中的所有用户(当前用户除外)都不会有
email
字段

我可以将
User
集合分为两个:一个是公共的,另一个是文档所有者可以访问的,但这听起来是错误的


我是noSQL概念的新手,所以可能我从错误的角度看待这个问题?

这是一个多次出现的请求。您可能希望在FaunaDB的ABAC角色系统中直接实现这一点,但尽管它提供了行级安全性,但目前还没有提供隐藏特定字段的功能。反馈已经被记录下来了,我们将对此进行调查

当前的方法是将用户从帐户中分离出来,并获取用户而不是帐户。不过,在将来有一些类似隐藏字段的东西会很有用

如果您想一想,在这种情况下,将身份验证信息与用户信息分开是有意义的。您永远不知道将来可能会提供另一种身份验证方法。我仍然记得凤凰城框架的书,他们做得很好,认为这是一个很好的做法


您还可以在无服务器函数中使用Apollo制作一个薄包装,并在传递结果时过滤掉这些字段。有一个指南解释了如何构建这样一个精简的Apollo中间件,它只需委托FaunaDB即可

我实际上按照您的建议做了,作为一个临时解决方案,直到找到隐藏字段的方法为止。但结果证明它足够好,它做它的工作,加上你的回答让我确信这是正确的方法之一。谢谢你的回复!稍后我将用代码片段来回答。