@@ -75,11 +75,6 @@ func (o *orgRoleResourceType) List(
7575 return nil , "" , nil , nil
7676 }
7777
78- bag , _ , err := parsePageToken (pToken .Token , & v2.ResourceId {ResourceType : resourceTypeOrgRole .Id })
79- if err != nil {
80- return nil , "" , nil , err
81- }
82-
8378 orgName , err := o .orgCache .GetOrgName (ctx , parentID )
8479 if err != nil {
8580 return nil , "" , nil , err
@@ -90,11 +85,7 @@ func (o *orgRoleResourceType) List(
9085 // Handle permission errors gracefully
9186 if resp != nil && (resp .StatusCode == http .StatusForbidden || resp .StatusCode == http .StatusNotFound ) {
9287 // Return empty list with no error to indicate we skipped this resource
93- pageToken , err := bag .NextToken ("" )
94- if err != nil {
95- return nil , "" , nil , err
96- }
97- return nil , pageToken , nil , nil
88+ return nil , "" , nil , nil
9889 }
9990 return nil , "" , nil , fmt .Errorf ("failed to list organization roles: %w" , err )
10091 }
@@ -112,12 +103,7 @@ func (o *orgRoleResourceType) List(
112103 ret = append (ret , roleResource )
113104 }
114105
115- pageToken , err := bag .NextToken ("" )
116- if err != nil {
117- return nil , "" , nil , err
118- }
119-
120- return ret , pageToken , nil , nil
106+ return ret , "" , nil , nil
121107}
122108
123109func (o * orgRoleResourceType ) Entitlements (
@@ -147,7 +133,7 @@ func (o *orgRoleResourceType) Grants(
147133 return nil , "" , nil , nil
148134 }
149135
150- bag , _ , err := parsePageToken (pToken .Token , & v2.ResourceId {ResourceType : resourceTypeOrgRole .Id })
136+ bag , page , err := parsePageToken (pToken .Token , & v2.ResourceId {ResourceType : resourceTypeOrgRole .Id })
151137 if err != nil {
152138 return nil , "" , nil , err
153139 }
@@ -165,7 +151,11 @@ func (o *orgRoleResourceType) Grants(
165151 var ret []* v2.Grant
166152
167153 // First, get teams with this role
168- teams , resp , err := o .client .Organizations .ListTeamsAssignedToOrgRole (ctx , orgName , roleID , nil )
154+ opts := & github.ListOptions {
155+ Page : page ,
156+ PerPage : pToken .Size ,
157+ }
158+ teams , resp , err := o .client .Organizations .ListTeamsAssignedToOrgRole (ctx , orgName , roleID , opts )
169159 if err != nil {
170160 // Handle permission errors without erroring out. Some customers may not want to give us permissions to get org roles and members.
171161 if resp != nil && (resp .StatusCode == http .StatusForbidden || resp .StatusCode == http .StatusNotFound ) {
@@ -198,22 +188,33 @@ func (o *orgRoleResourceType) Grants(
198188 ret = append (ret , grant )
199189 }
200190
191+ // If we got a full page of teams, return them and let the next page handle users
192+ if len (teams ) == pToken .Size {
193+ pageToken , err := bag .NextToken (fmt .Sprintf ("%d" , page + 1 ))
194+ if err != nil {
195+ return nil , "" , nil , err
196+ }
197+ return ret , pageToken , nil , nil
198+ }
199+
201200 // Then, get direct user assignments
202- users , resp , err := o .client .Organizations .ListUsersAssignedToOrgRole (ctx , orgName , roleID , nil )
201+ users , resp , err := o .client .Organizations .ListUsersAssignedToOrgRole (ctx , orgName , roleID , opts )
203202 if err != nil {
203+ // Handle permission errors without erroring out. Some customers may not want to give us permissions to get org roles and members.
204204 if resp != nil && (resp .StatusCode == http .StatusForbidden || resp .StatusCode == http .StatusNotFound ) {
205+ // Return empty list with no error to indicate we skipped this resource
205206 pageToken , err := bag .NextToken ("" )
206207 if err != nil {
207208 return nil , "" , nil , err
208209 }
209- return ret , pageToken , nil , nil
210+ return nil , pageToken , nil , nil
210211 }
211212 return nil , "" , nil , fmt .Errorf ("failed to list role users: %w" , err )
212213 }
213214
214- // Create regular grants for direct user assignments.
215+ // Create grants for users
215216 for _ , user := range users {
216- userResource , err := userResource (ctx , user , user .GetEmail () , nil )
217+ userResource , err := userResource (ctx , user , * user .Email , nil )
217218 if err != nil {
218219 return nil , "" , nil , err
219220 }
@@ -226,11 +227,20 @@ func (o *orgRoleResourceType) Grants(
226227 ret = append (ret , grant )
227228 }
228229
230+ // If we got a full page of users, return them and let the next page handle more users
231+ if len (users ) == pToken .Size {
232+ pageToken , err := bag .NextToken (fmt .Sprintf ("%d" , page + 1 ))
233+ if err != nil {
234+ return nil , "" , nil , err
235+ }
236+ return ret , pageToken , nil , nil
237+ }
238+
239+ // No more pages
229240 pageToken , err := bag .NextToken ("" )
230241 if err != nil {
231242 return nil , "" , nil , err
232243 }
233-
234244 return ret , pageToken , nil , nil
235245}
236246
0 commit comments