mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:37:32 +00:00
perf: improve org and org domain creation (#10232)
# Which Problems Are Solved
When an organization domain is verified, e.g. also when creating a new
organization (incl. generated domain), existing usernames are checked if
the domain has been claimed.
The query was not optimized for instances with many users and
organizations.
# How the Problems Are Solved
- Replace the query, which was searching over the users projection with
(computed loginnames) with a dedicated query checking the loginnames
projection directly.
- All occurrences have been updated to use the new query.
# Additional Changes
None
# Additional Context
- reported through support
- requires backport to v3.x
(cherry picked from commit fefeaea56a
)
This commit is contained in:
@@ -685,6 +685,35 @@ func (q *Queries) IsUserUnique(ctx context.Context, username, email, resourceOwn
|
||||
return isUnique, err
|
||||
}
|
||||
|
||||
//go:embed user_claimed_user_ids.sql
|
||||
var userClaimedUserIDOfOrgDomain string
|
||||
|
||||
func (q *Queries) SearchClaimedUserIDsOfOrgDomain(ctx context.Context, domain, orgID string) (userIDs []string, err error) {
|
||||
ctx, span := tracing.NewSpan(ctx)
|
||||
defer func() { span.EndWithError(err) }()
|
||||
|
||||
err = q.client.QueryContext(ctx,
|
||||
func(rows *sql.Rows) error {
|
||||
userIDs = make([]string, 0)
|
||||
for rows.Next() {
|
||||
var userID string
|
||||
err := rows.Scan(&userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
userIDs = append(userIDs, userID)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
userClaimedUserIDOfOrgDomain,
|
||||
authz.GetInstance(ctx).InstanceID(),
|
||||
"%@"+domain,
|
||||
orgID,
|
||||
)
|
||||
|
||||
return userIDs, err
|
||||
}
|
||||
|
||||
func (q *UserSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
|
||||
query = q.SearchRequest.toQuery(query)
|
||||
for _, q := range q.Queries {
|
||||
|
13
internal/query/user_claimed_user_ids.sql
Normal file
13
internal/query/user_claimed_user_ids.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
SELECT u.id
|
||||
FROM projections.login_names3_users u
|
||||
LEFT JOIN projections.login_names3_policies p_custom
|
||||
ON u.instance_id = p_custom.instance_id
|
||||
AND p_custom.instance_id = $1
|
||||
AND p_custom.resource_owner = u.resource_owner
|
||||
JOIN projections.login_names3_policies p_default
|
||||
ON u.instance_id = p_default.instance_id
|
||||
AND p_default.instance_id = $1 AND p_default.is_default IS TRUE
|
||||
WHERE u.instance_id = $1
|
||||
AND COALESCE(p_custom.must_be_domain, p_default.must_be_domain) = false
|
||||
AND u.user_name_lower like $2
|
||||
AND u.resource_owner <> $3;
|
Reference in New Issue
Block a user