Skip to content

Commit 5dabf5c

Browse files
Merge pull request #20 from PSNAppz/develop
Added check_resource_access dependency
2 parents 003b6cf + e7c355a commit 5dabf5c

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,37 @@ async def dependency(
157157
return auth
158158

159159
return dependency
160+
161+
162+
def check_resource_access(
163+
allowed_roles: set[str],
164+
client_id: str | None = None,
165+
auth_dependency: Callable | None = None,
166+
):
167+
"""Check that the user has at least one of the allowed roles in resource_access.
168+
169+
Args:
170+
allowed_roles: Set of role/privilege/action names to check for.
171+
client_id: If given, only check roles under this specific client.
172+
If None, check across all clients in resource_access.
173+
auth_dependency: Upstream dependency. Defaults to auth_principal.
174+
"""
175+
176+
async def dependency(
177+
auth: Annotated[Any, Depends(auth_dependency or auth_principal)],
178+
):
179+
claims = _claims_from_auth(auth)
180+
client_roles = claims.get("client_roles") or {}
181+
182+
if client_id:
183+
user_roles = set(client_roles.get(client_id, []))
184+
else:
185+
user_roles = set()
186+
for roles in client_roles.values():
187+
user_roles.update(roles)
188+
189+
if not user_roles.intersection(allowed_roles):
190+
raise ForbiddenError(message="Forbidden. Insufficient resource_access roles.")
191+
return auth
192+
193+
return dependency

0 commit comments

Comments
 (0)