Fix SCIM disable all non SCIM managed members

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-02-03 16:01:03 +01:00
parent e6a97f6b29
commit 1bc5ebce2c
2 changed files with 31 additions and 6 deletions

View File

@@ -23,6 +23,7 @@ type MembershipFilter struct {
email *mail.Addr email *mail.Addr
role *MembershipRole role *MembershipRole
state *MembershipState state *MembershipState
source *MembershipSource
} }
func NewMembershipFilter() *MembershipFilter { func NewMembershipFilter() *MembershipFilter {
@@ -56,11 +57,21 @@ func (f *MembershipFilter) State() *MembershipState {
return f.state return f.state
} }
func (f *MembershipFilter) WithSource(source MembershipSource) *MembershipFilter {
f.source = &source
return f
}
func (f *MembershipFilter) Source() *MembershipSource {
return f.source
}
func (f *MembershipFilter) SQLArguments() pgx.StrictNamedArgs { func (f *MembershipFilter) SQLArguments() pgx.StrictNamedArgs {
return pgx.StrictNamedArgs{ return pgx.StrictNamedArgs{
"filter_email": f.email, "filter_email": f.email,
"filter_role": f.role, "filter_role": f.role,
"filter_state": f.state, "filter_state": f.state,
"filter_source": f.source,
} }
} }
@@ -86,5 +97,12 @@ AND (
m.state = @filter_state::membership_state m.state = @filter_state::membership_state
ELSE TRUE ELSE TRUE
END END
)
AND (
CASE
WHEN @filter_source::text IS NOT NULL THEN
m.source = @filter_source::text
ELSE TRUE
END
)` )`
} }

View File

@@ -294,6 +294,13 @@ func (s *Service) ListUsers(
return nil, 0, err return nil, 0, err
} }
// Only return SCIM-managed users. This ensures that:
// 1. Users created through other means (manual, SAML) are not deactivated
// when they don't exist in the identity provider.
// 2. When a manual user exists in the identity provider but not in the
// SCIM list, CreateUser is called which enrolls them into SCIM management.
filter.WithSource(coredata.MembershipSourceSCIM)
scope := coredata.NewScopeFromObjectID(config.OrganizationID) scope := coredata.NewScopeFromObjectID(config.OrganizationID)
var memberships coredata.Memberships var memberships coredata.Memberships