feat(group): add user groups to token claims (#11009)

# Which Problems Are Solved

If the groups of a user is requested through a scope, details related to
the user's groups are added in the token claims.

# How the Problems Are Solved
By querying the user groups that the user is a part of, and setting them
in the token claims.

This PR introduces two scopes to request user groups: `groups` and
`urn:zitadel:iam:user:groups`
* `groups` returns an array of group names in the token claims with the
same name
* `urn:zitadel:iam:user:groups` returns an array of JSON objects with
information about the user groups in the token claims with the same name

# Additional Changes

N/A

# Additional Context

- Closes #9702 
- Follow-up for PRs:
  * #10455 
  * #10853 
  * #10758 
  * #10940

---------

Co-authored-by: Livio Spring <[email protected]>
This commit is contained in:
Gayathri Vijayan
2025-11-11 09:06:45 +01:00
committed by GitHub
co-authored by Livio Spring
parent e4a959c321
commit a9846498a9
8 changed files with 140 additions and 5 deletions
+14 -1
View File
@@ -62,6 +62,18 @@ user_org as (
join usr u on o.id = u.resource_owner
) r
),
-- find the user's groups
user_groups as (
select json_agg(row_to_json(r)) as user_groups from (
select g.id, g.name
from projections.group_users1 as gu
left join projections.groups1 as g on gu.group_id = g.id and gu.instance_id = g.instance_id
where gu.user_id = $1
and gu.instance_id = $2
and g.state = 1
)
r
),
-- join user grants to orgs, projects and user
grants as (
select json_agg(row_to_json(r)) as grants from (
@@ -87,5 +99,6 @@ select json_build_object(
),
'org', (select organization from user_org),
'metadata', (select metadata from metadata),
'user_grants', (select grants from grants)
'user_grants', (select grants from grants),
'user_groups', (select user_groups from user_groups)
);