Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relation ship when authorization is owner cannot access a parent upon creation #2859

Open
2 tasks done
ipodishima opened this issue Sep 10, 2024 · 6 comments
Open
2 tasks done
Labels
Gen 2 question Further information is requested transferred

Comments

@ipodishima
Copy link

How did you install the Amplify CLI?

npx

If applicable, what version of Node.js are you using?

v20.6.1

Amplify CLI Version

npx ampx --version 1.2.5

What operating system are you using?

Mac

Did you make any manual changes to the cloud resources managed by Amplify? Please describe the changes made.

No

Describe the bug

I took the example given in the documentation and just changed the authorization to owner

const schema = a.schema({
  Member: a.model({
    name: a.string().required(),
    // 1. Create a reference field
    teamId: a.id(),
    // 2. Create a belongsTo relationship with the reference field
    team: a.belongsTo('Team', 'teamId'),
  })
  .authorization(allow => [allow.owner()]),

  Team: a.model({
    mantra: a.string().required(),
    // 3. Create a hasMany relationship with the reference field
    //    from the `Member`s model.
    members: a.hasMany('Member', 'teamId'),
  })
  .authorization(allow => [allow.owner()])
});

I can run a mutation for creating a team with success.

mutation CreateTestTeam {
  createTeam(input: {mantra: "Test"}) {
    id
  }
}

But when I run this mutation

mutation CreateJohn {
  createMember(input: {name: "John", teamId: "c0da8ec0-5fe9-4125-b62c-1b0dbcb4a557"}) {
    id
    name
    team {
      id
      mantra
    }
  }
}

This is what I get

{
  "data": {
    "createMember": {
      "id": "16827537-b102-40f5-83e9-252a65872cda",
      "name": "John",
      "team": null
    }
  },
  "errors": [
    {
      "path": [
        "createMember",
        "team",
        "id"
      ],
      "locations": null,
      "message": "Cannot return null for non-nullable type: 'ID' within parent 'Team' (/createMember/team/id)"
    },
    {
      "path": [
        "createMember",
        "team",
        "mantra"
      ],
      "locations": null,
      "message": "Cannot return null for non-nullable type: 'String' within parent 'Team' (/createMember/team/mantra)"
    }
  ]
}

Note:
Running the query just after

query GetTeam {
  getTeam(id: "c0da8ec0-5fe9-4125-b62c-1b0dbcb4a557") {
    id
    mantra
    members {
      items {
        id
        name
      }
    }
  }
}

works (aka John was created, but the response had an error)

{
  "data": {
    "getTeam": {
      "id": "c0da8ec0-5fe9-4125-b62c-1b0dbcb4a557",
      "mantra": "Test",
      "members": {
        "items": [
          {
            "id": "16827537-b102-40f5-83e9-252a65872cda",
            "name": "John"
          }
        ]
      }
    }
  }
}

Also, when I run

query GetJohn {
  getMember(id: "16827537-b102-40f5-83e9-252a65872cda") {
    id
    name
    team {
      id
      mantra
    }
  }
}

There are no issues

{
  "data": {
    "getMember": {
      "id": "16827537-b102-40f5-83e9-252a65872cda",
      "name": "John",
      "team": {
        "id": "c0da8ec0-5fe9-4125-b62c-1b0dbcb4a557",
        "mantra": "Test"
      }
    }
  }
}

Expected behavior

When using allow.authenticated() I do not have this issue. I expect the same behavior when auth is owner()

Reproduction steps

Simply creating a new model with team and member like in the documentation, but with owner for the auth for both team and member

Project Identifier

No response

Log output

# Put your logs below this line


Additional information

No response

Before submitting, please confirm:

  • I have done my best to include a minimal, self-contained set of instructions for consistently reproducing the issue.
  • I have removed any sensitive information from my code snippets and submission.
@ipodishima ipodishima changed the title Relation ship when authorization is owner cannot access a child Relation ship when authorization is owner cannot access a parent upon creation Sep 10, 2024
@ykethan
Copy link
Member

ykethan commented Sep 10, 2024

Hey,👋 thanks for raising this! I'm going to transfer this over to our API repository for better assistance 🙂

@ykethan ykethan transferred this issue from aws-amplify/amplify-cli Sep 10, 2024
@ipodishima
Copy link
Author

Perfect thanks

I’m just seeing this in the documentation

IMG_6949

maybe it’s kinda related

@AnilMaktala AnilMaktala added question Further information is requested and removed pending-triage labels Sep 10, 2024
@AnilMaktala
Copy link
Member

Hey @ipodishima, Thanks for raising this. As mentioned in the documentation, you need to query the relation data separately.

@ipodishima
Copy link
Author

Ok @AnilMaktala
It’s a bit weird though, because the documentation is not really clear about this nor does it specify how you can create a member in this case.
By default, the mutation query to create a member tries to return the team.
So maybe that it shouldn’t be the case somehow?

@AnilMaktala
Copy link
Member

AnilMaktala commented Sep 11, 2024

Hey @ipodishima, Are you using subscriptions in your app? If not, you can disable them to resolve this issue.

@ipodishima
Copy link
Author

Hey @AnilMaktala no I'm not using subscriptions. I mean now yes, but not when I opened the bug.
My workaround for now is to not have relation ships. I just store the parent ID and fetches all objects with a specific parent ID

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Gen 2 question Further information is requested transferred
Projects
None yet
Development

No branches or pull requests

3 participants