ABAC权限在读取和写入方面不相同

问题描述 投票:1回答:1

我目前正在检查FaunaDB,以创建示例目标跟踪器(待办事项!)应用程序。使用graphQL,我已将架构创建为:

type Goal {
  title: String!
  completed: Boolean!
  owner: User!
}

type User {
  name: String!
  username: String! @unique
}

input GoalInput {
  title: String!
  completed: Boolean!
}

我想将ABAC权限设置为:

  1. 已登录的用户可以查看自己创建的目标。
  2. 登录的用户只能编辑自己创建的目标。

角色的权限已设置为:

{
   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自动创建的变异)不断抛出权限不足错误。

faunadb
1个回答
0
投票

仅上传您提供的模式,这是生成的GoalInput

input GoalInput {
  title: String!
  completed: Boolean!
}

如果无法使用owner字段创建新目标,则无法查询它们-owner将是null

尝试更新您的架构以包括用户的目标字段,以获取您正在寻找的一对多关系。 (fauna docs

type User {
  name: String!
  username: String! @unique
  goals: [Goal] @relation
}

然后确保每次创建新目标时,都将所有者设置为自己。

备用功能

您可以为createGoalForMe创建自定义突变,这将自动为您设置所有者字段。

请确保您授予call新功能特权。

© www.soinside.com 2019 - 2024. All rights reserved.