Skip to content

Commit fecca97

Browse files
committed
Authorization: Add paging for role assignment list/get calls
1 parent 842678b commit fecca97

File tree

5 files changed

+31
-14
lines changed

5 files changed

+31
-14
lines changed

src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
<HintPath>..\..\..\packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll</HintPath>
7272
</Reference>
7373
<Reference Include="Microsoft.Azure.Management.Authorization">
74-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Authorization.1.0.1\lib\net40\Microsoft.Azure.Management.Authorization.dll</HintPath>
74+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Authorization.1.0.2\lib\net40\Microsoft.Azure.Management.Authorization.dll</HintPath>
7575
</Reference>
7676
<Reference Include="Microsoft.Azure.ResourceManager, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
7777
<SpecificVersion>False</SpecificVersion>
@@ -551,4 +551,4 @@
551551
<ItemGroup />
552552
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
553553
<Import Project="..\..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
554-
</Project>
554+
</Project>

src/ResourceManager/Resources/Commands.Resources.Test/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<package id="Microsoft.Azure.Graph.RBAC" version="1.7.2-preview" targetFramework="net45" />
99
<package id="Microsoft.Azure.Insights" version="0.7.7-preview" targetFramework="net45" />
1010
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net45" />
11-
<package id="Microsoft.Azure.Management.Authorization" version="1.0.0" targetFramework="net45" />
11+
<package id="Microsoft.Azure.Management.Authorization" version="1.0.2" targetFramework="net45" />
1212
<package id="Microsoft.Azure.Management.Resources" version="2.18.7-preview" targetFramework="net45" />
1313
<package id="Microsoft.Azure.Test.Framework" version="1.0.5715.36130-prerelease" targetFramework="net45" />
1414
<package id="Microsoft.Azure.Test.HttpRecorder" version="1.0.5715.36130-prerelease" targetFramework="net45" />

src/ResourceManager/Resources/Commands.Resources/Commands.Resources.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@
6969
<HintPath>..\..\..\packages\Microsoft.Azure.Graph.RBAC.1.7.2-preview\lib\net40\Microsoft.Azure.Graph.RBAC.dll</HintPath>
7070
</Reference>
7171
<Reference Include="Microsoft.Azure.Management.Authorization">
72-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Authorization.1.0.1\lib\net40\Microsoft.Azure.Management.Authorization.dll</HintPath>
73-
<Private>True</Private>
72+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Authorization.1.0.2\lib\net40\Microsoft.Azure.Management.Authorization.dll</HintPath>
7473
</Reference>
7574
<Reference Include="Microsoft.Azure.ResourceManager, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
7675
<SpecificVersion>False</SpecificVersion>

src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,16 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
187187
parameters.PrincipalId = string.IsNullOrEmpty(options.ADObjectFilter.Id) ? adObject.Id : Guid.Parse(options.ADObjectFilter.Id);
188188
}
189189

190-
result.AddRange(AuthorizationManagementClient.RoleAssignments.List(parameters)
191-
.RoleAssignments
192-
.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId)
190+
var tempResult = AuthorizationManagementClient.RoleAssignments.List(parameters);
191+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId)
193192
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
194193

194+
while (!string.IsNullOrWhiteSpace(tempResult.NextLink))
195+
{
196+
tempResult = AuthorizationManagementClient.RoleAssignments.ListNext(tempResult.NextLink);
197+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId).ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
198+
}
199+
195200
// Filter out by scope
196201
if (!string.IsNullOrEmpty(options.Scope))
197202
{
@@ -203,15 +208,27 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
203208
// Filter by scope and above directly
204209
parameters.AtScope = true;
205210

206-
result.AddRange(AuthorizationManagementClient.RoleAssignments.ListForScope(options.Scope, parameters)
207-
.RoleAssignments
208-
.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId)
211+
var tempResult = AuthorizationManagementClient.RoleAssignments.ListForScope(options.Scope, parameters);
212+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId)
209213
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
214+
215+
while (!string.IsNullOrWhiteSpace(tempResult.NextLink))
216+
{
217+
tempResult = AuthorizationManagementClient.RoleAssignments.ListForScopeNext(tempResult.NextLink);
218+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(options.RoleDefinitionId)
219+
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
220+
}
210221
}
211222
else
212223
{
213-
result.AddRange(AuthorizationManagementClient.RoleAssignments.List(parameters)
214-
.RoleAssignments.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
224+
var tempResult = AuthorizationManagementClient.RoleAssignments.List(parameters);
225+
result.AddRange(tempResult.RoleAssignments.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
226+
227+
while (!string.IsNullOrWhiteSpace(tempResult.NextLink))
228+
{
229+
tempResult = AuthorizationManagementClient.RoleAssignments.ListNext(tempResult.NextLink);
230+
result.AddRange(tempResult.RoleAssignments.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
231+
}
215232
}
216233

217234
if (!string.IsNullOrEmpty(options.RoleDefinitionName))
@@ -255,6 +272,7 @@ public IEnumerable<PSRoleAssignment> RemoveRoleAssignment(FilterRoleAssignmentsO
255272
{
256273
// Match role assignments at exact scope. Ideally, atmost 1 roleAssignment should match the criteria
257274
// but an edge case can have multiple role assignments to the same role or multiple role assignments to different roles, with same name.
275+
// The FilterRoleAssignments takes care of paging internally
258276
IEnumerable<PSRoleAssignment> roleAssignments = FilterRoleAssignments(options, currentSubscription: string.Empty)
259277
.Where(ra => ra.Scope == options.Scope.TrimEnd('/'));
260278

src/ResourceManager/Resources/Commands.Resources/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net45" />
77
<package id="Microsoft.Azure.Gallery" version="2.6.2-preview" targetFramework="net45" />
88
<package id="Microsoft.Azure.Graph.RBAC" version="1.7.2-preview" targetFramework="net45" />
9-
<package id="Microsoft.Azure.Management.Authorization" version="1.0.1" targetFramework="net45" />
9+
<package id="Microsoft.Azure.Management.Authorization" version="1.0.2" targetFramework="net45" />
1010
<package id="Microsoft.Azure.Management.Resources" version="2.18.11-preview" targetFramework="net45" />
1111
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net45" />
1212
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" />

0 commit comments

Comments
 (0)