Skip to content

Commit b49c123

Browse files
authored
[Az.Resources] skip client side validation for RoleAssignment & RoleDefinition commands (#24037)
* skip client side validation for RoleAssignment commands * skip client side validation for RoleDefinition commands * skip client side validation for RoleDefinition commands * Update ChangeLog.md
1 parent 228710a commit b49c123

17 files changed

+273
-69
lines changed

src/Resources/Resources/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
-->
2020

2121
## Upcoming Release
22+
* Supported `-SkipClientSideScopeValidation` in RoleAssignment and RoleDefinition related commands. [#22473]
2223
* Updated Bicep build logic to use --stdout flag instead of creating a temporary file on disk.
2324
* Fixed exception when `-ApiVersion` is specified for `Get-AzResource`, affected by some resource types.
2425

src/Resources/Resources/RoleAssignments/GetAzureRoleAssignmentCommand.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ public class GetAzureRoleAssignmentCommand : ResourcesBaseCmdlet
218218
HelpMessage = "If specified, also returns the subscription classic administrators as role assignments.")]
219219
public SwitchParameter IncludeClassicAdministrators { get; set; }
220220

221+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
222+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
223+
221224
#endregion
222225

223226

@@ -251,7 +254,10 @@ public override void ExecuteCmdlet()
251254
WriteTerminatingError(ProjectResources.ScopeAndSubscriptionNeitherProvided);
252255
}
253256

254-
AuthorizationClient.ValidateScope(options.Scope, true);
257+
if (!SkipClientSideScopeValidation.IsPresent)
258+
{
259+
AuthorizationClient.ValidateScope(options.Scope, true);
260+
}
255261

256262
List<PSRoleAssignment> ra = PoliciesClient.FilterRoleAssignments(options, DefaultProfile.DefaultContext.Subscription?.Id?.ToString());
257263

src/Resources/Resources/RoleAssignments/NewAzureRoleAssignmentCommand.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ public class NewAzureRoleAssignmentCommand : ResourcesBaseCmdlet
250250
[ValidateNotNullOrEmpty]
251251
public SwitchParameter AllowDelegation { get; set; }
252252

253+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
254+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
255+
253256
#endregion
254257

255258
public Guid RoleAssignmentId { get; set; } = default(Guid);
@@ -337,7 +340,10 @@ public override void ExecuteCmdlet()
337340
WriteTerminatingError(ProjectResources.ScopeAndSubscriptionNeitherProvided);
338341
}
339342

340-
AuthorizationClient.ValidateScope(parameters.Scope, true);
343+
if (!SkipClientSideScopeValidation.IsPresent)
344+
{
345+
AuthorizationClient.ValidateScope(parameters.Scope, true);
346+
}
341347

342348
WriteObject(PoliciesClient.CreateRoleAssignment(parameters, RoleAssignmentId));
343349
}

src/Resources/Resources/RoleAssignments/RemoveAzureRoleAssignmentCommand.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ public class RemoveAzureRoleAssignmentCommand : ResourcesBaseCmdlet
161161
[Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSet.RoleAssignment, HelpMessage = "Role Assignment.")]
162162
public PSRoleAssignment InputObject { get; set; }
163163

164+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
165+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
166+
164167
public override void ExecuteCmdlet()
165168
{
166169
IEnumerable<PSRoleAssignment> roleAssignments = null;
@@ -201,7 +204,11 @@ public override void ExecuteCmdlet()
201204
WriteTerminatingError(ProjectResources.ScopeAndSubscriptionNeitherProvided);
202205
}
203206

204-
AuthorizationClient.ValidateScope(options.Scope, true);
207+
if (!SkipClientSideScopeValidation.IsPresent)
208+
{
209+
AuthorizationClient.ValidateScope(options.Scope, true);
210+
}
211+
205212
ConfirmAction(
206213
string.Format(ProjectResources.RemovingRoleAssignment, ObjectId, Scope, RoleDefinitionName),
207214
ObjectId,

src/Resources/Resources/RoleAssignments/SetAzureRoleAssignmentCommand.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public class SetAzureRoleAssignmentCommand : ResourcesBaseCmdlet
4444
[Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSet.RoleAssignment, HelpMessage = "Role Assignment.")]
4545
public PSRoleAssignment InputObject { get; set; }
4646

47+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
48+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
49+
4750
[Parameter(Mandatory = false)]
4851
public SwitchParameter PassThru { get; set; }
4952
#endregion
@@ -95,7 +98,10 @@ public override void ExecuteCmdlet()
9598
}
9699

97100
// Validate the request
98-
AuthorizationClient.ValidateScope(parameters.Scope, false);
101+
if (!SkipClientSideScopeValidation.IsPresent)
102+
{
103+
AuthorizationClient.ValidateScope(parameters.Scope, false);
104+
}
99105
bool isValidRequest = true;
100106

101107
// Check that only Description, Condition and ConditionVersion have been changed, if anything else is changed the whole request fails

src/Resources/Resources/RoleDefinitions/GetAzureRoleDefinitionCommand.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public class GetAzureRoleDefinitionCommand : ResourcesBaseCmdlet
5151
HelpMessage = "If specified, only displays the custom created roles in the directory.")]
5252
public SwitchParameter Custom { get; set; }
5353

54+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
55+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
56+
5457
#endregion
5558

5659

@@ -73,7 +76,10 @@ public override void ExecuteCmdlet()
7376
WriteTerminatingError(ProjectResources.ScopeAndSubscriptionNeitherProvided);
7477
}
7578

76-
AuthorizationClient.ValidateScope(options.Scope, true);
79+
if (!SkipClientSideScopeValidation.IsPresent)
80+
{
81+
AuthorizationClient.ValidateScope(options.Scope, true);
82+
}
7783

7884
IEnumerable<PSRoleDefinition> filteredRoleDefinitions = PoliciesClient.FilterRoleDefinitions(options);
7985

src/Resources/Resources/RoleDefinitions/NewAzureRoleDefinitionCommand.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public class NewAzureRoleDefinitionCommand : ResourcesBaseCmdlet
4141

4242
public Guid RoleDefinitionId { get; set; } = default(Guid);
4343

44+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
45+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
46+
4447
public override void ExecuteCmdlet()
4548
{
4649
PSRoleDefinition role = null;
@@ -67,8 +70,12 @@ public override void ExecuteCmdlet()
6770
role = Role;
6871
}
6972

70-
foreach(var scope in role.AssignableScopes) {
71-
AuthorizationClient.ValidateScope(scope, false);
73+
if (!SkipClientSideScopeValidation.IsPresent)
74+
{
75+
foreach (var scope in role.AssignableScopes)
76+
{
77+
AuthorizationClient.ValidateScope(scope, false);
78+
}
7279
}
7380

7481
WriteObject(PoliciesClient.CreateRoleDefinition(role, RoleDefinitionId));

src/Resources/Resources/RoleDefinitions/RemoveAzureRoleDefinitionCommand.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public class RemoveAzureRoleDefinitionCommand : ResourcesBaseCmdlet
5050
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = ParameterSet.RoleDefinitionId, HelpMessage = "Scope of the existing role definition.")]
5151
public string Scope { get; set; }
5252

53+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
54+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
55+
5356
[Parameter(Mandatory = false)]
5457
public SwitchParameter Force { get; set; }
5558

@@ -98,7 +101,10 @@ public override void ExecuteCmdlet()
98101
WriteTerminatingError(ProjectResources.ScopeAndSubscriptionNeitherProvided);
99102
}
100103

101-
AuthorizationClient.ValidateScope(options.Scope, true);
104+
if (!SkipClientSideScopeValidation.IsPresent)
105+
{
106+
AuthorizationClient.ValidateScope(options.Scope, true);
107+
}
102108

103109
ConfirmAction(
104110
Force.IsPresent,

src/Resources/Resources/RoleDefinitions/SetAzureRoleDefinitionCommand.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class SetAzureRoleDefinitionCommand : ResourcesBaseCmdlet
3838
[Parameter(Mandatory = true, ValueFromPipeline = true, ParameterSetName = ParameterSet.RoleDefinition, HelpMessage = "Role definition.")]
3939
public PSRoleDefinition Role { get; set; }
4040

41+
[Parameter(Mandatory = false, HelpMessage = "If specified, skip client side scope validation.")]
42+
public SwitchParameter SkipClientSideScopeValidation { get; set; }
43+
4144
public override void ExecuteCmdlet()
4245
{
4346
PSRoleDefinition role = null;
@@ -62,8 +65,12 @@ public override void ExecuteCmdlet()
6265

6366
role = role ?? Role;
6467

65-
foreach (var scope in role.AssignableScopes) {
66-
AuthorizationClient.ValidateScope(scope, false);
68+
if (!SkipClientSideScopeValidation.IsPresent)
69+
{
70+
foreach (var scope in role.AssignableScopes)
71+
{
72+
AuthorizationClient.ValidateScope(scope, false);
73+
}
6774
}
6875

6976
WriteObject(PoliciesClient.UpdateRoleDefinition(role));

src/Resources/Resources/help/Get-AzRoleAssignment.md

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,107 +28,119 @@ Please notice that this cmdlet will mark `ObjectType` as `Unknown` in output if
2828
### EmptyParameterSet (Default)
2929
```
3030
Get-AzRoleAssignment [-RoleDefinitionName <String>] [-IncludeClassicAdministrators]
31-
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
31+
[-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
3232
```
3333

3434
### ObjectIdParameterSet
3535
```
3636
Get-AzRoleAssignment -ObjectId <String> [-RoleDefinitionName <String>] [-ExpandPrincipalGroups]
37-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
37+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
38+
[<CommonParameters>]
3839
```
3940

4041
### ResourceGroupWithObjectIdParameterSet
4142
```
4243
Get-AzRoleAssignment -ObjectId <String> -ResourceGroupName <String> [-RoleDefinitionName <String>]
43-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
44+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
45+
[<CommonParameters>]
4446
```
4547

4648
### ResourceWithObjectIdParameterSet
4749
```
4850
Get-AzRoleAssignment -ObjectId <String> -ResourceGroupName <String> -ResourceName <String>
4951
-ResourceType <String> [-ParentResource <String>] [-RoleDefinitionName <String>]
50-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
52+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
53+
[<CommonParameters>]
5154
```
5255

5356
### ScopeWithObjectIdParameterSet
5457
```
5558
Get-AzRoleAssignment -ObjectId <String> [-RoleDefinitionName <String>] -Scope <String>
56-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
59+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
60+
[<CommonParameters>]
5761
```
5862

5963
### RoleIdWithScopeAndObjectIdParameterSet
6064
```
6165
Get-AzRoleAssignment [-ObjectId <String>] -RoleDefinitionId <Guid> [-Scope <String>]
62-
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
66+
[-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
6367
```
6468

6569
### ResourceGroupWithSignInNameParameterSet
6670
```
6771
Get-AzRoleAssignment -SignInName <String> -ResourceGroupName <String> [-RoleDefinitionName <String>]
68-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
72+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
73+
[<CommonParameters>]
6974
```
7075

7176
### ResourceWithSignInNameParameterSet
7277
```
7378
Get-AzRoleAssignment -SignInName <String> -ResourceGroupName <String> -ResourceName <String>
7479
-ResourceType <String> [-ParentResource <String>] [-RoleDefinitionName <String>]
75-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
80+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
81+
[<CommonParameters>]
7682
```
7783

7884
### ScopeWithSignInNameParameterSet
7985
```
8086
Get-AzRoleAssignment -SignInName <String> [-RoleDefinitionName <String>] -Scope <String>
81-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
87+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
88+
[<CommonParameters>]
8289
```
8390

8491
### SignInNameParameterSet
8592
```
8693
Get-AzRoleAssignment -SignInName <String> [-RoleDefinitionName <String>] [-ExpandPrincipalGroups]
87-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
94+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
95+
[<CommonParameters>]
8896
```
8997

9098
### ResourceGroupWithSPNParameterSet
9199
```
92100
Get-AzRoleAssignment -ServicePrincipalName <String> -ResourceGroupName <String> [-RoleDefinitionName <String>]
93-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
101+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
102+
[<CommonParameters>]
94103
```
95104

96105
### ResourceWithSPNParameterSet
97106
```
98107
Get-AzRoleAssignment -ServicePrincipalName <String> -ResourceGroupName <String> -ResourceName <String>
99108
-ResourceType <String> [-ParentResource <String>] [-RoleDefinitionName <String>]
100-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
109+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
110+
[<CommonParameters>]
101111
```
102112

103113
### ScopeWithSPNParameterSet
104114
```
105115
Get-AzRoleAssignment -ServicePrincipalName <String> [-RoleDefinitionName <String>] -Scope <String>
106-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
116+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
117+
[<CommonParameters>]
107118
```
108119

109120
### SPNParameterSet
110121
```
111122
Get-AzRoleAssignment -ServicePrincipalName <String> [-RoleDefinitionName <String>]
112-
[-IncludeClassicAdministrators] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
123+
[-IncludeClassicAdministrators] [-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>]
124+
[<CommonParameters>]
113125
```
114126

115127
### ResourceGroupParameterSet
116128
```
117129
Get-AzRoleAssignment -ResourceGroupName <String> [-RoleDefinitionName <String>] [-IncludeClassicAdministrators]
118-
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
130+
[-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
119131
```
120132

121133
### ResourceParameterSet
122134
```
123135
Get-AzRoleAssignment -ResourceGroupName <String> -ResourceName <String> -ResourceType <String>
124136
[-ParentResource <String>] [-RoleDefinitionName <String>] [-IncludeClassicAdministrators]
125-
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
137+
[-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
126138
```
127139

128140
### ScopeParameterSet
129141
```
130142
Get-AzRoleAssignment [-RoleDefinitionName <String>] -Scope <String> [-IncludeClassicAdministrators]
131-
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
143+
[-SkipClientSideScopeValidation] [-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
132144
```
133145

134146
## DESCRIPTION
@@ -426,6 +438,21 @@ Accept pipeline input: True (ByPropertyName)
426438
Accept wildcard characters: False
427439
```
428440
441+
### -SkipClientSideScopeValidation
442+
If specified, skip client side scope validation.
443+
444+
```yaml
445+
Type: System.Management.Automation.SwitchParameter
446+
Parameter Sets: (All)
447+
Aliases:
448+
449+
Required: False
450+
Position: Named
451+
Default value: None
452+
Accept pipeline input: False
453+
Accept wildcard characters: False
454+
```
455+
429456
### CommonParameters
430457
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
431458

0 commit comments

Comments
 (0)