diff --git a/pkg/services/accesscontrol/dualwrite/collectors.go b/pkg/services/accesscontrol/dualwrite/collectors.go index b78a8d00ba1..92a1604259e 100644 --- a/pkg/services/accesscontrol/dualwrite/collectors.go +++ b/pkg/services/accesscontrol/dualwrite/collectors.go @@ -72,35 +72,48 @@ func folderTreeCollector(folderService folder.Service) legacyTupleCollector { ctx, ident := identity.WithServiceIdentity(ctx, orgID) - q := folder.GetFoldersQuery{ - OrgID: orgID, - SignedInUser: ident, - } - - folders, err := folderService.GetFolders(ctx, q) - if err != nil { - return nil, err - } - tuples := make(map[string]map[string]*openfgav1.TupleKey) - for _, f := range folders { - var tuple *openfgav1.TupleKey - if f.ParentUID == "" { - continue + const pageSize = 1000 + var page int64 = 1 + + for { + q := folder.GetFoldersQuery{ + OrgID: orgID, + SignedInUser: ident, + Limit: pageSize, + Page: page, } - tuple = &openfgav1.TupleKey{ - Object: zanzana.NewTupleEntry(zanzana.TypeFolder, f.UID, ""), - Relation: zanzana.RelationParent, - User: zanzana.NewTupleEntry(zanzana.TypeFolder, f.ParentUID, ""), + folders, err := folderService.GetFolders(ctx, q) + if err != nil { + return nil, err } - if tuples[tuple.Object] == nil { - tuples[tuple.Object] = make(map[string]*openfgav1.TupleKey) + for _, f := range folders { + var tuple *openfgav1.TupleKey + if f.ParentUID == "" { + continue + } + + tuple = &openfgav1.TupleKey{ + Object: zanzana.NewTupleEntry(zanzana.TypeFolder, f.UID, ""), + Relation: zanzana.RelationParent, + User: zanzana.NewTupleEntry(zanzana.TypeFolder, f.ParentUID, ""), + } + + if tuples[tuple.Object] == nil { + tuples[tuple.Object] = make(map[string]*openfgav1.TupleKey) + } + + tuples[tuple.Object][tuple.String()] = tuple } - tuples[tuple.Object][tuple.String()] = tuple + if int64(len(folders)) < pageSize { + break + } + + page++ } return tuples, nil