【发布时间】:2020-06-08 12:30:27
【问题描述】:
我很难找到一种方法来向所有人隐藏用户电子邮件,但所有者除外(用户只能访问他的电子邮件)。有没有办法为某些角色隐藏某个文档字段?
这是我发现的一个示例,它创建了一个可以动态访问整个 User 集合的角色:
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 角色,以使 allUsers 查询结果数组中的所有用户(当前用户除外)都没有 email 字段? p>
我可以将User 集合分成两个:一个是公开的,另一个可供文档所有者访问,但这听起来不对。
我是 noSQL 概念的新手,所以也许我从错误的角度看待这个问题?
【问题讨论】:
标签: nosql graphql authorization faunadb