Skip to content

Commit 1186aa5

Browse files
Merge pull request #14 from PSNAppz/develop
Added client_roles to AuthPrincipal
2 parents 3a71bf1 + a707f5a commit 1186aa5

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

.github/workflows/docker-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ jobs:
1616
matrix:
1717
iam_api:
1818
- iam-staff-portal-api
19-
- iam-agent-portal-api
20-
- iam-bene-portal-api
19+
# - iam-agent-portal-api
20+
# - iam-bene-portal-api
2121
env:
2222
NAMESPACE: ${{ secrets.docker_hub_organisation || 'openg2p' }}
2323
SERVICE_NAME: ${{ matrix.iam_api }}

iam-agent-portal-api/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenG2P IAM Agent Portal API package.

iam-bene-portal-api/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenG2P IAM Bene Portal API package.

iam-core/src/iam_core/schemas/auth_principal.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ class AuthPrincipal(BaseModel):
1616
iat: datetime | None = None
1717
exp: datetime | None = None
1818
roles: list[str] = Field(default_factory=list)
19+
client_roles: dict[str, list[str]] | None = None
1920
provider: str | None = None
2021
raw_claims: dict[str, Any] = Field(default_factory=dict)

iam-core/src/iam_core/user_auth/dependencies.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ def _extract_roles(claims: dict) -> list[str]:
6767
return sorted(realm_roles | client_roles)
6868

6969

70+
def _extract_client_roles(claims: dict) -> dict[str, list[str]] | None:
71+
resource_access = claims.get("resource_access") or {}
72+
if not resource_access:
73+
return None
74+
result = {}
75+
for client, value in resource_access.items():
76+
roles = (value or {}).get("roles") or []
77+
if roles:
78+
result[client] = sorted(roles)
79+
return result or None
80+
81+
7082
def _resolve_user_type(claims: dict) -> str | None:
7183
return claims.get("user_type") or claims.get("userType")
7284

@@ -85,6 +97,7 @@ async def auth_principal(
8597
iat=claims.get("iat"),
8698
exp=claims.get("exp"),
8799
roles=_extract_roles(claims),
100+
client_roles=_extract_client_roles(claims),
88101
provider=claims.get("identity_provider") or claims.get("iss"),
89102
raw_claims=claims,
90103
)

0 commit comments

Comments
 (0)