Skip to content

Commit 3730a9a

Browse files
author
Hovsep
committed
Merge pull request Azure#1185 from namratab/Paging
Authorization: Add role assignment paging for list calls
2 parents a543a17 + ddf6bb0 commit 3730a9a

File tree

5 files changed

+40
-18
lines changed

5 files changed

+40
-18
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: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,17 @@ 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(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
190+
var tempResult = AuthorizationManagementClient.RoleAssignments.List(parameters);
191+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, 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(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
198+
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
199+
}
200+
195201
// Filter out by scope
196202
if (!string.IsNullOrEmpty(options.Scope))
197203
{
@@ -203,17 +209,31 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
203209
// Filter by scope and above directly
204210
parameters.AtScope = true;
205211

206-
result.AddRange(AuthorizationManagementClient.RoleAssignments.ListForScope(options.Scope, parameters)
207-
.RoleAssignments
208-
.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
212+
var tempResult = AuthorizationManagementClient.RoleAssignments.ListForScope(options.Scope, parameters);
213+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
209214
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
215+
216+
while (!string.IsNullOrWhiteSpace(tempResult.NextLink))
217+
{
218+
tempResult = AuthorizationManagementClient.RoleAssignments.ListForScopeNext(tempResult.NextLink);
219+
result.AddRange(tempResult.RoleAssignments.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
220+
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
221+
}
210222
}
211223
else
212224
{
213-
result.AddRange(AuthorizationManagementClient.RoleAssignments.List(parameters)
214-
.RoleAssignments
215-
.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
216-
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
225+
var tempResult = AuthorizationManagementClient.RoleAssignments.List(parameters);
226+
result.AddRange(tempResult.RoleAssignments
227+
.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
228+
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
229+
230+
while (!string.IsNullOrWhiteSpace(tempResult.NextLink))
231+
{
232+
tempResult = AuthorizationManagementClient.RoleAssignments.ListNext(tempResult.NextLink);
233+
result.AddRange(tempResult.RoleAssignments
234+
.FilterRoleAssignmentsOnRoleId(AuthorizationHelper.GetRoleDefinitionFullyQualifiedId(currentSubscription, options.RoleDefinitionId))
235+
.ToPSRoleAssignments(this, ActiveDirectoryClient, options.ExcludeAssignmentsForDeletedPrincipals));
236+
}
217237
}
218238

219239
if (!string.IsNullOrEmpty(options.RoleDefinitionName))
@@ -252,12 +272,14 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
252272
/// Deletes a role assignments based on the used options.
253273
/// </summary>
254274
/// <param name="options">The role assignment filtering options</param>
275+
/// <param name="subscriptionId">Current subscription id</param>
255276
/// <returns>The deleted role assignments</returns>
256277
public IEnumerable<PSRoleAssignment> RemoveRoleAssignment(FilterRoleAssignmentsOptions options, string subscriptionId)
257278
{
258279
// Match role assignments at exact scope. Ideally, atmost 1 roleAssignment should match the criteria
259280
// but an edge case can have multiple role assignments to the same role or multiple role assignments to different roles, with same name.
260-
IEnumerable<PSRoleAssignment> roleAssignments = FilterRoleAssignments(options, subscriptionId)
281+
// The FilterRoleAssignments takes care of paging internally
282+
IEnumerable<PSRoleAssignment> roleAssignments = FilterRoleAssignments(options, currentSubscription: subscriptionId)
261283
.Where(ra => ra.Scope == options.Scope.TrimEnd('/'));
262284

263285
if (roleAssignments == null || !roleAssignments.Any())
@@ -307,7 +329,8 @@ public PSRoleDefinition GetRoleRoleDefinition(string name)
307329
/// <summary>
308330
/// Deletes a role definition based on the id.
309331
/// </summary>
310-
/// <param name="id">The role definition id.</param>
332+
/// <param name="roleDefinitionId">The role definition id to delete</param>
333+
/// <param name="subscriptionId">Current subscription id</param>
311334
/// <returns>The deleted role definition.</returns>
312335
public PSRoleDefinition RemoveRoleDefinition(Guid roleDefinitionId, string subscriptionId)
313336
{

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)