@@ -189,36 +189,158 @@ Describe 'Set-SqlDscServerPermission' -Tag @('Integration_SQL2017', 'Integration
189189 }
190190 }
191191
192- Context ' When setting permissions for a server role' {
192+ Context ' When setting exact permissions for a server role' {
193193 BeforeEach {
194194 # Get the role object for testing
195195 $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
196196
197197 # Clean up any existing permissions
198198 Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
199199 Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDatabase' - Force - ErrorAction ' SilentlyContinue'
200+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDefinition' - Force - ErrorAction ' SilentlyContinue'
201+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' CreateAnyDatabase' - WithGrant - Force - ErrorAction ' SilentlyContinue'
200202 }
201203
202204 AfterAll {
203205 # Clean up role permissions
204206 $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
205207 Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
206208 Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDatabase' - Force - ErrorAction ' SilentlyContinue'
209+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDefinition' - Force - ErrorAction ' SilentlyContinue'
210+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' CreateAnyDatabase' - WithGrant - Force - ErrorAction ' SilentlyContinue'
207211 }
208212
209213 It ' Should set exact Grant permissions for role' {
210- Set-SqlDscServerPermission - ServerRole $script :roleObject - Grant ' ViewServerState' - Force - ErrorAction ' Stop'
214+ Set-SqlDscServerPermission - ServerRole $script :roleObject - Grant ' ViewServerState' , ' ViewAnyDatabase ' - Force - ErrorAction ' Stop'
211215
212- # Verify the permission was granted
213- $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState' - ErrorAction ' Stop'
216+ # Verify the permissions were granted
217+ $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState' , ' ViewAnyDatabase' - ExactMatch - ErrorAction ' Stop'
218+ $result | Should - BeTrue
219+ }
220+
221+ It ' Should set exact GrantWithGrant permissions for role' {
222+ Set-SqlDscServerPermission - ServerRole $script :roleObject - GrantWithGrant ' CreateAnyDatabase' - Force - ErrorAction ' Stop'
223+
224+ # Verify the permission was granted with grant option
225+ $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' CreateAnyDatabase' - WithGrant - ErrorAction ' Stop'
226+ $result | Should - BeTrue
227+ }
228+
229+ It ' Should set exact Deny permissions for role' {
230+ Set-SqlDscServerPermission - ServerRole $script :roleObject - Deny ' ViewAnyDefinition' - Force - ErrorAction ' Stop'
231+
232+ # Verify the permission was denied
233+ $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Deny - Permission ' ViewAnyDefinition' - ErrorAction ' Stop'
214234 $result | Should - BeTrue
215235 }
216236
237+ It ' Should set combined Grant, GrantWithGrant, and Deny permissions for role' {
238+ Set-SqlDscServerPermission - ServerRole $script :roleObject `
239+ - Grant ' ViewServerState' `
240+ - GrantWithGrant ' CreateAnyDatabase' `
241+ - Deny ' ViewAnyDefinition' `
242+ - Force - ErrorAction ' Stop'
243+
244+ # Verify Grant permission
245+ $grantResult = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState' - ErrorAction ' Stop'
246+ $grantResult | Should - BeTrue
247+
248+ # Verify GrantWithGrant permission
249+ $grantWithGrantResult = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' CreateAnyDatabase' - WithGrant - ErrorAction ' Stop'
250+ $grantWithGrantResult | Should - BeTrue
251+
252+ # Verify Deny permission
253+ $denyResult = Test-SqlDscServerPermission - ServerRole $script :roleObject - Deny - Permission ' ViewAnyDefinition' - ErrorAction ' Stop'
254+ $denyResult | Should - BeTrue
255+ }
256+ }
257+
258+ Context ' When revoking permissions for a server role by setting empty arrays' {
259+ BeforeEach {
260+ # Get the role object for testing
261+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
262+
263+ # Set up known permissions to revoke
264+ Grant-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' , ' ViewAnyDatabase' - Force - ErrorAction ' Stop'
265+ }
266+
267+ AfterAll {
268+ # Clean up role permissions
269+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
270+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
271+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDatabase' - Force - ErrorAction ' SilentlyContinue'
272+ }
273+
274+ It ' Should revoke all Grant permissions for role when empty Grant array is specified' {
275+ Set-SqlDscServerPermission - ServerRole $script :roleObject - Grant @ () - Force - ErrorAction ' Stop'
276+
277+ # Verify the permissions were revoked
278+ $result1 = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState' - ErrorAction ' Stop'
279+ $result1 | Should - BeFalse
280+
281+ $result2 = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewAnyDatabase' - ErrorAction ' Stop'
282+ $result2 | Should - BeFalse
283+ }
284+ }
285+
286+ Context ' When replacing existing permissions with new ones for a server role' {
287+ BeforeEach {
288+ # Get the role object for testing
289+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
290+
291+ # Set up initial permissions
292+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
293+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDatabase' - Force - ErrorAction ' SilentlyContinue'
294+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDefinition' - Force - ErrorAction ' SilentlyContinue'
295+
296+ Grant-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' , ' ViewAnyDatabase' - Force - ErrorAction ' Stop'
297+ }
298+
299+ AfterAll {
300+ # Clean up role permissions
301+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
302+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
303+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDatabase' - Force - ErrorAction ' SilentlyContinue'
304+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewAnyDefinition' - Force - ErrorAction ' SilentlyContinue'
305+ }
306+
307+ It ' Should replace existing permissions with new specified permissions for role' {
308+ # Change from ViewServerState,ViewAnyDatabase to ViewAnyDefinition
309+ Set-SqlDscServerPermission - ServerRole $script :roleObject - Grant ' ViewAnyDefinition' - Force - ErrorAction ' Stop'
310+
311+ # Verify old permissions were revoked
312+ $result1 = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState' - ErrorAction ' Stop'
313+ $result1 | Should - BeFalse
314+
315+ $result2 = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewAnyDatabase' - ErrorAction ' Stop'
316+ $result2 | Should - BeFalse
317+
318+ # Verify new permission was granted
319+ $result3 = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewAnyDefinition' - ErrorAction ' Stop'
320+ $result3 | Should - BeTrue
321+ }
322+ }
323+
324+ Context ' When using pipeline input for a server role' {
325+ BeforeEach {
326+ # Get the role object for testing
327+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
328+
329+ # Clean up
330+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
331+ }
332+
333+ AfterAll {
334+ # Clean up role permissions
335+ $script :roleObject = Get-SqlDscRole - ServerObject $script :serverObject - Name $script :testRoleName - ErrorAction ' Stop'
336+ Revoke-SqlDscServerPermission - ServerRole $script :roleObject - Permission ' ViewServerState' - Force - ErrorAction ' SilentlyContinue'
337+ }
338+
217339 It ' Should accept ServerRole object from pipeline' {
218- $script :roleObject | Set-SqlDscServerPermission - Grant ' ViewAnyDatabase ' - Force - ErrorAction ' Stop'
340+ $script :roleObject | Set-SqlDscServerPermission - Grant ' ViewServerState ' - Force - ErrorAction ' Stop'
219341
220342 # Verify the permission was granted
221- $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewAnyDatabase ' - ErrorAction ' Stop'
343+ $result = Test-SqlDscServerPermission - ServerRole $script :roleObject - Grant - Permission ' ViewServerState ' - ErrorAction ' Stop'
222344 $result | Should - BeTrue
223345 }
224346 }
0 commit comments