File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed
iam-core/src/iam_core/user_auth Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments