Skip to content

List User cannot get all users #236

@Lin064

Description

@Lin064

Checklist

  • I have looked into the README and have not found a suitable solution or answer.
  • I have looked into the documentation and have not found a suitable solution or answer.
  • I have searched the issues and have not found a suitable solution or answer.
  • I have upgraded to the latest version of OpenFGA and the issue still persists.
  • I have searched the Slack community and have not found a suitable solution or answer.
  • I agree to the terms within the OpenFGA Code of Conduct.

Description

Description

When using the listUsers API to list all users who have the viewer relation on a folder, the response does not include all users that should be inferred through indirect or inherited relationships.

However, using the check API for the same users and relation returns true, which indicates that the relationship is correctly modeled in the store.

var request = new ClientListUsersRequest()
        ._object(new FgaObject().type("folder").id(id))
        .relation("viewer")
        .userFilters(List.of(
                new UserTypeFilter().type("user")
        ));

var response = fgaClient.listUsers(request);

Authorization Model

type user

type group
  relations
    define child: [group]
    define member: [user] or member from child
    define owner: [user, group#owner] or owner from parent
    define parent: [group]

type folder
  relations
    define can_share: editor
    define viewer: [user, group#member] or owner or editor or viewer from parent
    define editor: [user, group#member] or owner or editor from parent
    define owner: [user, group#owner] or owner from parent
    define parent: [folder]

Tutples

user:user1 owner group:1
user:user2 member group:1

group:1#owner owner folder:1
group:1#member editor folder:1
folder:1 parent folder:3

From the model and tuples:

user1 → owner of group:1 → owner of folder:1 → viewer of folder:1 → viewer of folder:3

user2 → member of group:1 → editor of folder:1 → editor of folder:3 → viewer of folder:3

Using check(user2, viewer, folder:3) returns true

But listUsers(folder:3, viewer) does not return user2 (but do have user1)

Reproduction

Expectation

listUsers should return both user1 and user2 since both effectively have the viewer relation on folder:3 via inheritance and group membership.

Reproduction

  1. Create the model above.

  2. Insert the tuples as shown.

  3. Run check for user2 viewer folder:3 → returns true.

  4. Run listUsers(folder:3, viewer) → user2 (and possibly user1) missing.

OpenFGA SDK version

0.2.0

OpenFGA version

SDK Configuration

normal setting

Logs

No response

References

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Status

Intake

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions