Skip to content

Commit 567f595

Browse files
committed
fix: custom role issues
limit permission list to custom roles that exist also add cleanup to AccessRoleGroup table when custom role is removed ticket 32016460905
1 parent b187be2 commit 567f595

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

Modules/CIPPCore/Public/Authentication/Test-CIPPAccessUserRole.ps1

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,34 @@ function Test-CIPPAccessUserRole {
3131
$uri = "https://graph.microsoft.com/beta/users/$($User.userDetails)/transitiveMemberOf"
3232
$Memberships = New-GraphGetRequest -uri $uri -NoAuthCheck $true | Where-Object { $_.'@odata.type' -eq '#microsoft.graph.group' }
3333
if ($Memberships) {
34-
Write-Information "Found user roles for $($User.userDetails)"
34+
Write-Information "Found group memberships for $($User.userDetails)"
3535
} else {
36-
Write-Information "No user roles found for $($User.userDetails)"
36+
Write-Information "No group memberships found for $($User.userDetails)"
3737
}
3838
} catch {
3939
Write-Information "Could not get user roles for $($User.userDetails). $($_.Exception.Message)"
4040
return $User
4141
}
4242

4343
$AccessGroupsTable = Get-CippTable -TableName AccessRoleGroups
44-
$AccessGroups = Get-CIPPAzDataTableEntity @AccessGroupsTable
44+
$AccessGroups = Get-CIPPAzDataTableEntity @AccessGroupsTable -Filter "PartitionKey eq 'AccessRoleGroups'"
45+
$CustomRolesTable = Get-CippTable -TableName CustomRoles
46+
$CustomRoles = Get-CIPPAzDataTableEntity @CustomRolesTable -Filter "PartitionKey eq 'CustomRoles'"
47+
$BaseRoles = @('superadmin', 'admin', 'editor', 'readonly')
4548

4649
$Roles = foreach ($AccessGroup in $AccessGroups) {
47-
if ($Memberships.id -contains $AccessGroup.GroupId) {
50+
if ($Memberships.id -contains $AccessGroup.GroupId -and ($CustomRoles.RowKey -contains $AccessGroup.RowKey -or $BaseRoles -contains $AccessGroup.RowKey)) {
4851
$AccessGroup.RowKey
4952
}
5053
}
5154

5255
$Roles = @($Roles) + @($User.userRoles)
5356

54-
if (($Roles | Measure-Object).Count -gt 0) {
57+
if ($Roles) {
58+
Write-Information "Roles determined for $($User.userDetails): $($Roles -join ', ')"
59+
}
60+
61+
if (($Roles | Measure-Object).Count -gt 2) {
5562
$UserRole = [PSCustomObject]@{
5663
PartitionKey = 'AccessUser'
5764
RowKey = [string]$User.userDetails

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/CIPP/Settings/Invoke-ExecCustomRole.ps1

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ function Invoke-ExecCustomRole {
110110
Write-Information "Deleting custom role $($Request.Body.RoleName)"
111111
$Role = Get-CIPPAzDataTableEntity @Table -Filter "RowKey eq '$($Request.Body.RoleName)'" -Property RowKey, PartitionKey
112112
Remove-AzDataTableEntity -Force @Table -Entity $Role
113+
$AccessRoleGroup = Get-CIPPAzDataTableEntity @AccessRoleGroupTable -Filter "PartitionKey eq 'AccessRoleGroups' and RowKey eq '$($Request.Body.RoleName)'"
114+
if ($AccessRoleGroup) {
115+
Remove-AzDataTableEntity -Force @AccessRoleGroupTable -Entity $AccessRoleGroup
116+
}
113117
$Body = @{Results = 'Custom role deleted' }
114118
Write-LogMessage -headers $Request.Headers -API 'ExecCustomRole' -message "Deleted custom role $($Request.Body.RoleName)" -Sev 'Info'
115119
}

0 commit comments

Comments
 (0)