1
- using Azure . Analytics . Synapse . AccessControl ;
2
- using Microsoft . Azure . Commands . ResourceManager . Common . ArgumentCompleters ;
1
+ using Microsoft . Azure . Commands . ResourceManager . Common . ArgumentCompleters ;
3
2
using Microsoft . Azure . Commands . Synapse . Common ;
4
3
using Microsoft . Azure . Commands . Synapse . Models ;
5
4
using Microsoft . WindowsAzure . Commands . Utilities . Common ;
6
- using System ;
7
- using System . Collections . Generic ;
8
5
using System . Linq ;
9
6
using System . Management . Automation ;
10
- using System . Text ;
7
+ using System . Text . RegularExpressions ;
8
+ using static Microsoft . Azure . Commands . Synapse . Models . SynapseConstants ;
11
9
12
10
namespace Microsoft . Azure . Commands . Synapse
13
11
{
@@ -110,6 +108,44 @@ public class GetAzureSynapseRoleAssignment : SynapseRoleCmdletBase
110
108
[ ValidateNotNullOrEmpty ]
111
109
public string ObjectId { get ; set ; }
112
110
111
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndNameParameterSet ,
112
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
113
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndIdParameterSet ,
114
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
115
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndRoleDefinitionIdAndObjectIdParameterSet ,
116
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
117
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndServicePrincipalNameParameterSet ,
118
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
119
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndNameParameterSet ,
120
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
121
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndIdParameterSet ,
122
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
123
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndRoleDefinitionIdAndObjectIdParameterSet ,
124
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
125
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndServicePrincipalNameParameterSet ,
126
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItemType ) ]
127
+ [ ValidateNotNullOrEmpty ]
128
+ public WorkspaceItemType ItemType { get ; set ; }
129
+
130
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndNameParameterSet ,
131
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
132
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndIdParameterSet ,
133
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
134
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndRoleDefinitionIdAndObjectIdParameterSet ,
135
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
136
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceNameAndServicePrincipalNameParameterSet ,
137
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
138
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndNameParameterSet ,
139
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
140
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndIdParameterSet ,
141
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
142
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndRoleDefinitionIdAndObjectIdParameterSet ,
143
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
144
+ [ Parameter ( ValueFromPipelineByPropertyName = false , ParameterSetName = GetByWorkspaceObjectAndServicePrincipalNameParameterSet ,
145
+ Mandatory = false , HelpMessage = HelpMessages . WorkspaceItem ) ]
146
+ [ ValidateNotNullOrEmpty ]
147
+ public string Item { get ; set ; }
148
+
113
149
public override void ExecuteCmdlet ( )
114
150
{
115
151
if ( this . IsParameterBound ( c => c . WorkspaceObject ) )
@@ -132,22 +168,39 @@ public override void ExecuteCmdlet()
132
168
this . ObjectId = SynapseAnalyticsClient . GetObjectIdFromServicePrincipalName ( this . ServicePrincipalName ) ;
133
169
}
134
170
171
+ string itemType = null ;
172
+ if ( this . IsParameterBound ( c => c . ItemType ) )
173
+ {
174
+ itemType = this . ItemType . GetItemTypeString ( ) ;
175
+ }
176
+
135
177
if ( this . IsParameterBound ( c => c . RoleAssignmentId ) )
136
178
{
137
179
WriteObject ( new PSRoleAssignmentDetails ( SynapseAnalyticsClient . GetRoleAssignmentById ( this . RoleAssignmentId ) ) ) ;
138
180
}
139
181
else
140
182
{
141
- var roleAssignment = SynapseAnalyticsClient . ListRoleAssignments ( this . RoleDefinitionId , this . ObjectId )
142
- . Select ( element => new PSRoleAssignmentDetails ( element ) ) ;
183
+ var roleAssignments = SynapseAnalyticsClient . ListRoleAssignments ( this . RoleDefinitionId , this . ObjectId ) . Select ( element => new PSRoleAssignmentDetails ( element ) ) ;
184
+ string allowedScopePattern = null ;
185
+ if ( this . IsParameterBound ( c => c . ItemType ) && this . IsParameterBound ( c => c . Item ) )
186
+ {
187
+ allowedScopePattern = $ "(^workspaces/{ this . WorkspaceName } $)|(^workspaces/{ this . WorkspaceName } /{ itemType } /{ this . Item } $)";
188
+ }
189
+ else if ( this . IsParameterBound ( c => c . ItemType ) && ! this . IsParameterBound ( c => c . Item ) )
190
+ {
191
+ allowedScopePattern = $ "(^workspaces/{ this . WorkspaceName } $)|(^workspaces/{ this . WorkspaceName } /{ itemType } /[^/]+$)";
192
+ }
193
+ else if ( ! this . IsParameterBound ( c => c . ItemType ) && this . IsParameterBound ( c => c . Item ) )
194
+ {
195
+ allowedScopePattern = $ "(^workspaces/{ this . WorkspaceName } $)|(^workspaces/{ this . WorkspaceName } /[^/]+/{ this . Item } $)";
196
+ }
143
197
144
- // TODO: Currently, when only `ObjectId` is specified, the cmdlet returns incorrect result. Filter from client side as a workaround
145
- if ( ! string . IsNullOrEmpty ( this . ObjectId ) )
198
+ if ( ! string . IsNullOrEmpty ( allowedScopePattern ) )
146
199
{
147
- roleAssignment = roleAssignment . Where ( element => element . ObjectId == this . ObjectId ) ;
200
+ roleAssignments = roleAssignments . Where ( ra => ra . Scope == null || Regex . IsMatch ( ra . Scope , allowedScopePattern , RegexOptions . IgnoreCase ) ) ;
148
201
}
149
202
150
- WriteObject ( roleAssignment , true ) ;
203
+ WriteObject ( roleAssignments , true ) ;
151
204
}
152
205
}
153
206
}
0 commit comments