Skip to content

Commit 82c164d

Browse files
committed
feat(query): create query for global app token grants
Retrieves grant info for recursive requests for resources that can live in any scope (Global, Org, and Project)
1 parent c389a03 commit 82c164d

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

internal/iam/query.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,42 @@ const (
564564
grant_this_role_scope;
565565
`
566566

567+
// grantsForTokenGlobalOrgProjectResourcesRecursiveQuery gets a app token's grants for resources
568+
// applicable to all scopes at the global request scope.
569+
grantsForTokenGlobalOrgProjectResourcesRecursiveQuery = `
570+
select app_token_permission_global.private_id as permission_id,
571+
app_token_permission_global.description,
572+
app_token_permission_global.create_time,
573+
app_token_permission_global.grant_this_scope,
574+
app_token_permission_global.grant_scope,
575+
app_token_global.public_id as app_token_id,
576+
array_agg(distinct app_token_permission_grant.canonical_grant) as canonical_grants,
577+
array_agg(distinct coalesce(iam_scope_org.scope_id, iam_scope_project.scope_id)) as active_grant_scopes
578+
from app_token_global
579+
join app_token_permission_global
580+
on app_token_global.public_id = app_token_permission_global.app_token_id
581+
and app_token_global.public_id = any(@token_ids)
582+
join app_token_permission_grant
583+
on app_token_permission_global.private_id = app_token_permission_grant.permission_id
584+
join iam_grant
585+
on app_token_permission_grant.canonical_grant = iam_grant.canonical_grant
586+
and iam_grant.resource = any(@resources)
587+
left join app_token_permission_global_individual_org_grant_scope
588+
on app_token_permission_global.private_id = app_token_permission_global_individual_org_grant_scope.permission_id
589+
left join iam_scope_org
590+
on app_token_permission_global_individual_org_grant_scope.scope_id = iam_scope_org.scope_id
591+
left join app_token_permission_global_individual_project_grant_scope
592+
on app_token_permission_global.private_id = app_token_permission_global_individual_project_grant_scope.permission_id
593+
left join iam_scope_project
594+
on app_token_permission_global_individual_project_grant_scope.scope_id = iam_scope_project.scope_id
595+
group by app_token_permission_global.private_id,
596+
app_token_permission_global.description,
597+
app_token_permission_global.create_time,
598+
app_token_permission_global.grant_this_scope,
599+
app_token_permission_global.grant_scope,
600+
app_token_global.public_id;
601+
`
602+
567603
estimateCountRoles = `
568604
select reltuples::bigint as estimate from pg_class where oid in ('iam_role'::regclass)
569605
`

0 commit comments

Comments
 (0)