@@ -11,30 +11,30 @@ Function Invoke-ExecModifyCalPerms {
1111 param ($Request , $TriggerMetadata )
1212
1313 $APIName = $Request.Params.CIPPEndpoint
14- Write-LogMessage - headers $Request.Headers - API $APINAME - message ' Accessed this API' - Sev ' Debug'
15-
16- $Username = $request.body.userID
17- $Tenantfilter = $request.body.tenantfilter
18- $Permissions = $request.body.permissions
14+ $Headers = $Request.Headers
15+ Write-LogMessage - headers $Headers - API $APIName - message ' Accessed this API' - Sev ' Debug'
1916
20- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Processing request for user: $Username , tenant: $Tenantfilter " - Sev ' Debug'
17+ $Username = $Request.Body.userID
18+ $TenantFilter = $Request.Body.tenantFilter
19+ $Permissions = $Request.Body.permissions
2120
22- if ($username -eq $null ) {
23- Write-LogMessage - headers $Request.Headers - API $APINAME - message ' Username is null' - Sev ' Error'
21+ Write-LogMessage - headers $Headers - API $APIName - message " Processing request for user: $Username , tenant: $TenantFilter " - Sev ' Debug'
22+
23+ if ($null -eq $Username ) {
24+ Write-LogMessage - headers $Headers - API $APIName - message ' Username is null' - Sev ' Error'
2425 $body = [pscustomobject ]@ {' Results' = @ (' Username is required' ) }
2526 Push-OutputBinding - Name Response - Value ([HttpResponseContext ]@ {
2627 StatusCode = [HttpStatusCode ]::BadRequest
2728 Body = $Body
2829 })
2930 return
3031 }
31-
32+
3233 try {
33- $userid = (New-GraphGetRequest - uri " https://graph.microsoft.com/beta/users/$ ( $username ) " - tenantid $Tenantfilter ).id
34- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Retrieved user ID: $userid " - Sev ' Debug'
35- }
36- catch {
37- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Failed to get user ID: $ ( $_.Exception.Message ) " - Sev ' Error'
34+ $UserId = (New-GraphGetRequest - uri " https://graph.microsoft.com/beta/users/$ ( $Username ) " - tenantid $TenantFilter ).id
35+ Write-LogMessage - headers $Headers - API $APIName - message " Retrieved user ID: $UserId " - Sev ' Debug'
36+ } catch {
37+ Write-LogMessage - headers $Headers - API $APIName - message " Failed to get user ID: $ ( $_.Exception.Message ) " - Sev ' Error'
3838 $body = [pscustomobject ]@ {' Results' = @ (" Failed to get user ID: $ ( $_.Exception.Message ) " ) }
3939 Push-OutputBinding - Name Response - Value ([HttpResponseContext ]@ {
4040 StatusCode = [HttpStatusCode ]::NotFound
@@ -43,98 +43,73 @@ Function Invoke-ExecModifyCalPerms {
4343 return
4444 }
4545
46- $Results = [System.Collections.ArrayList ]::new()
46+ $Results = [System.Collections.Generic.List [ string ] ]::new()
4747 $HasErrors = $false
4848
4949 # Convert permissions to array format if it's an object with numeric keys
5050 if ($Permissions -is [PSCustomObject ]) {
5151 if ($Permissions.PSObject.Properties.Name -match ' ^\d+$' ) {
5252 $Permissions = $Permissions.PSObject.Properties.Value
53- }
54- else {
53+ } else {
5554 $Permissions = @ ($Permissions )
5655 }
5756 }
5857
59- Write-LogMessage - headers $Request . Headers - API $APINAME - message " Processing $ ( $Permissions.Count ) permission entries" - Sev ' Debug'
58+ Write-LogMessage - headers $Headers - API $APIName - message " Processing $ ( $Permissions.Count ) permission entries" - Sev ' Debug'
6059
6160 foreach ($Permission in $Permissions ) {
62- Write-LogMessage - headers $Request . Headers - API $APINAME - message " Processing permission: $ ( $Permission | ConvertTo-Json ) " - Sev ' Debug'
63-
61+ Write-LogMessage - headers $Headers - API $APIName - message " Processing permission: $ ( $Permission | ConvertTo-Json ) " - Sev ' Debug'
62+
6463 $PermissionLevel = $Permission.PermissionLevel.value ?? $Permission.PermissionLevel
6564 $Modification = $Permission.Modification
6665 $CanViewPrivateItems = $Permission.CanViewPrivateItems ?? $false
67-
68- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Permission Level: $PermissionLevel , Modification: $Modification , CanViewPrivateItems: $CanViewPrivateItems " - Sev ' Debug'
69-
66+ $FolderName = $Permission.FolderName ?? ' Calendar'
67+
68+ Write-LogMessage - headers $Headers - API $APIName - message " Permission Level: $PermissionLevel , Modification: $Modification , CanViewPrivateItems: $CanViewPrivateItems , FolderName: $FolderName " - Sev ' Debug'
69+
7070 # Handle UserID as array or single value
7171 $TargetUsers = @ ($Permission.UserID | ForEach-Object { $_.value ?? $_ })
7272
73- Write-LogMessage - headers $Request . Headers - API $APINAME - message " Target Users: $ ( $TargetUsers -join ' , ' ) " - Sev ' Debug'
73+ Write-LogMessage - headers $Headers - API $APIName - message " Target Users: $ ( $TargetUsers -join ' , ' ) " - Sev ' Debug'
7474
7575 foreach ($TargetUser in $TargetUsers ) {
7676 try {
77- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Processing target user: $TargetUser " - Sev ' Debug'
78-
79- if ($Modification -eq ' Remove' ) {
80- try {
81- $CalPerms = New-ExoRequest - Anchor $username - tenantid $Tenantfilter - cmdlet ' Remove-MailboxFolderPermission' - cmdParams @ {
82- Identity = " $ ( $userid ) :\Calendar"
83- User = $TargetUser
84- Confirm = $false
85- }
86- $null = $results.Add (" Removed $ ( $TargetUser ) from $ ( $username ) Calendar permissions" )
87- }
88- catch {
89- $null = $results.Add (" No existing permissions to remove for $ ( $TargetUser ) " )
90- }
91- }
92- else {
93- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Setting permissions with AccessRights: $PermissionLevel " - Sev ' Debug'
94-
95- $cmdParams = @ {
96- Identity = " $ ( $userid ) :\Calendar"
97- User = $TargetUser
98- AccessRights = $PermissionLevel
99- Confirm = $false
100- }
101-
102- if ($CanViewPrivateItems ) {
103- $cmdParams [' SharingPermissionFlags' ] = ' Delegate,CanViewPrivateItems'
104- }
105-
106- try {
107- # Try Add first
108- $CalPerms = New-ExoRequest - Anchor $username - tenantid $Tenantfilter - cmdlet ' Add-MailboxFolderPermission' - cmdParams $cmdParams
109- $null = $results.Add (" Granted $ ( $TargetUser ) $ ( $PermissionLevel ) access to $ ( $username ) Calendar$ ( $CanViewPrivateItems ? ' with access to private items' : ' ' ) " )
110- }
111- catch {
112- # If Add fails, try Set
113- $CalPerms = New-ExoRequest - Anchor $username - tenantid $Tenantfilter - cmdlet ' Set-MailboxFolderPermission' - cmdParams $cmdParams
114- $null = $results.Add (" Updated $ ( $TargetUser ) $ ( $PermissionLevel ) access to $ ( $username ) Calendar$ ( $CanViewPrivateItems ? ' with access to private items' : ' ' ) " )
115- }
77+ Write-LogMessage - headers $Headers - API $APIName - message " Processing target user: $TargetUser " - Sev ' Debug'
78+ $Params = @ {
79+ APIName = $APIName
80+ Headers = $Headers
81+ RemoveAccess = if ($Modification -eq ' Remove' ) { $TargetUser } else { $null }
82+ TenantFilter = $TenantFilter
83+ UserID = $UserId
84+ folderName = $FolderName
85+ UserToGetPermissions = $TargetUser
86+ LoggingName = $TargetUser
87+ Permissions = $PermissionLevel
88+ CanViewPrivateItems = $CanViewPrivateItems
11689 }
117- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Successfully executed $ ( $PermissionLevel ) permission modification for $ ( $TargetUser ) on $ ( $username ) " - Sev ' Info' - tenant $TenantFilter
118- }
119- catch {
90+
91+ # Write-Host "Request params: $($Params | ConvertTo-Json)"
92+ $Result = Set-CIPPCalendarPermission @Params
93+
94+ $null = $Results.Add ($Result )
95+ } catch {
12096 $HasErrors = $true
121- Write-LogMessage - headers $Request.Headers - API $APINAME - message " Could not execute $ ( $PermissionLevel ) permission modification for $ ( $TargetUser ) on $ ( $username ) . Error: $ ( $_.Exception.Message ) " - Sev ' Error' - tenant $TenantFilter
122- $null = $results.Add (" Could not execute $ ( $PermissionLevel ) permission modification for $ ( $TargetUser ) on $ ( $username ) . Error: $ ( $_.Exception.Message ) " )
97+ $null = $Results.Add (" $ ( $_.Exception.Message ) " )
12398 }
12499 }
125100 }
126101
127- if ($results .Count -eq 0 ) {
128- Write-LogMessage - headers $Request . Headers - API $APINAME - message ' No results were generated from the operation' - Sev ' Warning'
129- $null = $results .Add (' No results were generated from the operation. Please check the logs for more details.' )
102+ if ($Results .Count -eq 0 ) {
103+ Write-LogMessage - headers $Headers - API $APIName - message ' No results were generated from the operation' - Sev ' Warning'
104+ $null = $Results .Add (' No results were generated from the operation. Please check the logs for more details.' )
130105 $HasErrors = $true
131106 }
132107
133- $body = [pscustomobject ]@ {' Results' = @ ($results ) }
108+ $Body = [pscustomobject ]@ {' Results' = @ ($Results ) }
134109
135110 # Associate values to output bindings by calling 'Push-OutputBinding'.
136111 Push-OutputBinding - Name Response - Value ([HttpResponseContext ]@ {
137112 StatusCode = if ($HasErrors ) { [HttpStatusCode ]::InternalServerError } else { [HttpStatusCode ]::OK }
138113 Body = $Body
139114 })
140- }
115+ }
0 commit comments