Skip to content

Commit ab098b3

Browse files
feat: add group membership support to user templates (KelvinTegelaar#1952)
- Implements KelvinTegelaar/CIPP#5478 - Store `groupMemberships` field in user default templates - Add group assignment logic to New-CIPPUserTask — assigns groups after user creatio
2 parents 00e3185 + bafec9c commit ab098b3

1 file changed

Lines changed: 32 additions & 54 deletions

File tree

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Identity/Administration/Users/Invoke-AddUserDefaults.ps1

Lines changed: 32 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -81,63 +81,41 @@ function Invoke-AddUserDefaults {
8181
$SetSponsor = $Request.Body.setSponsor
8282
$CopyFrom = $Request.Body.copyFrom
8383

84-
# Fetch group memberships from source user if provided
85-
$GroupMemberships = @()
86-
if ($Request.Body.sourceUserId -and $TenantFilter) {
87-
try {
88-
Write-Host "Fetching group memberships from source user: $($Request.Body.sourceUserId)"
89-
$SourceGroups = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/users/$($Request.Body.sourceUserId)/memberOf" -tenantid $TenantFilter
90-
$GroupMemberships = @($SourceGroups | Where-Object {
91-
$_.'@odata.type' -eq '#microsoft.graph.group' -and
92-
$_.groupTypes -notcontains 'DynamicMembership' -and
93-
$_.onPremisesSyncEnabled -ne $true
94-
} | ForEach-Object {
95-
@{
96-
id = $_.id
97-
displayName = $_.displayName
98-
mailEnabled = $_.mailEnabled
99-
groupTypes = $_.groupTypes
100-
}
101-
})
102-
Write-Host "Found $($GroupMemberships.Count) group memberships to store in template"
103-
} catch {
104-
Write-Warning "Failed to fetch group memberships: $($_.Exception.Message)"
105-
}
106-
}
84+
# Groups
85+
$GroupMemberships = if ($Request.Body.addToGroups) { $Request.Body.addToGroups } else { $Request.Body.groupMemberships }
10786

10887
# Create template object with all fields from CippAddEditUser
10988
$TemplateObject = @{
110-
tenantFilter = $TenantFilter
111-
templateName = $TemplateName
112-
defaultForTenant = [bool]$DefaultForTenant
113-
givenName = $GivenName
114-
surname = $Surname
115-
displayName = $DisplayName
116-
usernameFormat = $UsernameFormat
117-
usernameSpaceHandling = $UsernameSpaceHandling
118-
usernameSpaceReplacement = $UsernameSpaceReplacement
119-
primDomain = $PrimDomain
120-
addedAliases = $AddedAliases
121-
Autopassword = $Autopassword
122-
password = $Password
123-
MustChangePass = $MustChangePass
124-
usageLocation = $UsageLocation
125-
licenses = $Licenses
126-
removeLicenses = $RemoveLicenses
127-
jobTitle = $JobTitle
128-
streetAddress = $StreetAddress
129-
city = $City
130-
state = $State
131-
postalCode = $PostalCode
132-
country = $Country
133-
companyName = $CompanyName
134-
department = $Department
135-
mobilePhone = $MobilePhone
136-
businessPhones = $BusinessPhones
137-
otherMails = $OtherMails
138-
setManager = $SetManager
139-
setSponsor = $SetSponsor
140-
copyFrom = $CopyFrom
89+
tenantFilter = $TenantFilter
90+
templateName = $TemplateName
91+
defaultForTenant = [bool]$DefaultForTenant
92+
givenName = $GivenName
93+
surname = $Surname
94+
displayName = $DisplayName
95+
usernameFormat = $UsernameFormat
96+
primDomain = $PrimDomain
97+
addedAliases = $AddedAliases
98+
Autopassword = $Autopassword
99+
password = $Password
100+
MustChangePass = $MustChangePass
101+
usageLocation = $UsageLocation
102+
licenses = $Licenses
103+
removeLicenses = $RemoveLicenses
104+
jobTitle = $JobTitle
105+
streetAddress = $StreetAddress
106+
city = $City
107+
state = $State
108+
postalCode = $PostalCode
109+
country = $Country
110+
companyName = $CompanyName
111+
department = $Department
112+
mobilePhone = $MobilePhone
113+
businessPhones = $BusinessPhones
114+
otherMails = $OtherMails
115+
setManager = $SetManager
116+
setSponsor = $SetSponsor
117+
copyFrom = $CopyFrom
118+
groupMemberships = $GroupMemberships
141119
}
142120

143121
# Use existing GUID if editing, otherwise generate new one

0 commit comments

Comments
 (0)