У меня проблемы с поиском способа скрыть электронные письма пользователей от всех, кроме владельца (у пользователя есть доступ только к его электронным письмам). Есть ли способ скрыть определенное поле документа для определенных ролей?
Вот пример, который я нашел, который создает роль с динамическим c доступом ко всей коллекции 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 }
}
]
})
Я попытался немного его изменить, но мне не удалось настроить доступ на уровне поля.
Допустим, я настроил FaunaDB со схемой GraphQL ниже.
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
?
Я мог бы разбить коллекцию User
на две части: одна - publi c, другая доступна владельцу документа, но это звучит неправильно.
Я новичок в нет SQL концепция, так что, может быть, я смотрю на эту проблему с неправильной точки зрения?