我目前正在检查FaunaDB,以创建示例目标跟踪器(待办事项!)应用程序。使用graphQL,我已将架构创建为:
type Goal {
title: String!
completed: Boolean!
owner: User!
}
type User {
name: String!
username: String! @unique
}
input GoalInput {
title: String!
completed: Boolean!
}
我想将ABAC权限设置为:
角色的权限已设置为:
{
resource: Collection("Goal"),
actions: {
read: Query(
Lambda("goalRef", Equals(Select(["data", "owner"], Get(Var("goalRef"))), Identity()))
),
write: Query(
Lambda("goalRef", Equals(Select(["data", "owner"], Get(Var("goalRef"))), Identity()))
)
}
}
虽然read
部分效果很好,但write
部分效果不是很好。 updateGoal
(由FaunaDB自动创建的变异)不断抛出权限不足错误。
仅上传您提供的模式,这是生成的GoalInput
:
input GoalInput {
title: String!
completed: Boolean!
}
如果无法使用owner
字段创建新目标,则无法查询它们-owner
将是null
尝试更新您的架构以包括用户的目标字段,以获取您正在寻找的一对多关系。 (fauna docs)
type User {
name: String!
username: String! @unique
goals: [Goal] @relation
}
然后确保每次创建新目标时,都将所有者设置为自己。
您可以为createGoalForMe
创建自定义突变,这将自动为您设置所有者字段。
请确保您授予call
新功能特权。