Skip to content

Commit 260443f

Browse files
committed
Authorization: Bug fix in Get-AzureRMRoleAassignment to filter list of classic admins if user principal has been provided
1 parent 1896c51 commit 260443f

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

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

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,17 +136,18 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
136136
List<PSRoleAssignment> result = new List<PSRoleAssignment>();
137137
ListAssignmentsFilterParameters parameters = new ListAssignmentsFilterParameters();
138138

139+
PSADObject adObject = null;
139140
if (options.ADObjectFilter.HasFilter)
140141
{
142+
adObject = ActiveDirectoryClient.GetADObject(options.ADObjectFilter);
143+
if (adObject == null)
144+
{
145+
throw new KeyNotFoundException(ProjectResources.PrincipalNotFound);
146+
}
147+
141148
// Filter first by principal
142149
if (options.ExpandPrincipalGroups)
143150
{
144-
PSADObject adObject = ActiveDirectoryClient.GetADObject(options.ADObjectFilter);
145-
if (adObject == null)
146-
{
147-
throw new KeyNotFoundException(ProjectResources.PrincipalNotFound);
148-
}
149-
150151
if (!(adObject is PSADUser))
151152
{
152153
throw new InvalidOperationException(ProjectResources.ExpandGroupsNotSupported);
@@ -156,7 +157,7 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
156157
}
157158
else
158159
{
159-
parameters.PrincipalId = string.IsNullOrEmpty(options.ADObjectFilter.Id) ? ActiveDirectoryClient.GetObjectId(options.ADObjectFilter) : Guid.Parse(options.ADObjectFilter.Id);
160+
parameters.PrincipalId = string.IsNullOrEmpty(options.ADObjectFilter.Id) ? adObject.Id : Guid.Parse(options.ADObjectFilter.Id);
160161
}
161162

162163
result.AddRange(AuthorizationManagementClient.RoleAssignments.List(parameters)
@@ -190,7 +191,22 @@ public List<PSRoleAssignment> FilterRoleAssignments(FilterRoleAssignmentsOptions
190191
{
191192
// Get classic administrator access assignments
192193
List<ClassicAdministrator> classicAdministrators = AuthorizationManagementClient.ClassicAdministrators.List().ClassicAdministrators.ToList();
193-
List<PSRoleAssignment> classicAdministratorsAssignments = classicAdministrators.Select(a => a.ToPSRoleAssignment(currentSubscription)).ToList();
194+
List<PSRoleAssignment> classicAdministratorsAssignments = classicAdministrators.Select(a => a.ToPSRoleAssignment(currentSubscription)).ToList();
195+
196+
// Filter by principal if provided
197+
if (options.ADObjectFilter.HasFilter)
198+
{
199+
if (!(adObject is PSADUser))
200+
{
201+
throw new InvalidOperationException(ProjectResources.IncludeClassicAdminsNotSupported);
202+
}
203+
204+
var userObject = adObject as PSADUser;
205+
classicAdministratorsAssignments = classicAdministratorsAssignments.Where(c =>
206+
c.DisplayName.Equals(userObject.UserPrincipalName, StringComparison.OrdinalIgnoreCase) ||
207+
c.DisplayName.Equals(userObject.Mail, StringComparison.OrdinalIgnoreCase)).ToList();
208+
}
209+
194210
result.AddRange(classicAdministratorsAssignments);
195211
}
196212

src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,4 +312,7 @@
312312
<data name="PrincipalNotFound" xml:space="preserve">
313313
<value>Cannot find principal using the specified options</value>
314314
</data>
315+
<data name="IncludeClassicAdminsNotSupported" xml:space="preserve">
316+
<value>IncludeClassicAdministrators is only supported for a User principal</value>
317+
</data>
315318
</root>

0 commit comments

Comments
 (0)