bito-code-review[bot] commented on code in PR #40026:
URL: https://github.com/apache/superset/pull/40026#discussion_r3220093927


##########
superset/security/api.py:
##########
@@ -171,6 +171,19 @@ def guest_token(self) -> Response:
         try:
             body = guest_token_create_schema.load(request.json)
             
self.appbuilder.sm.validate_guest_token_resources(body["resources"])
+            # Verify requesting user has access to each specified resource
+            for resource in body["resources"]:
+                if resource["type"] == GuestTokenResourceType.DASHBOARD.value:
+                    from superset.models.embedded_dashboard import 
EmbeddedDashboard  # noqa: PLC0415
+                    embedded = (
+                        db.session.query(EmbeddedDashboard)
+                        .filter_by(uuid=resource["id"])
+                        .one_or_none()
+                    )
+                    if embedded and not 
self.appbuilder.sm.can_access_dashboard(
+                        embedded.dashboard
+                    ):
+                        raise ForbiddenError()

Review Comment:
   <div>
   
   
   <div id="suggestion">
   <div id="issue"><b>N+1 Query in Access Validation</b></div>
   <div id="fix">
   
   The added access validation loop performs a separate database query for each 
dashboard resource, potentially causing N+1 query performance issues when 
multiple dashboards are specified in guest token requests. Batching the queries 
would improve efficiency on plausible execution paths.
   </div>
   
   
   <details>
   <summary>
   <b>Code suggestion</b>
   </summary>
   <blockquote>Check the AI-generated fix before applying</blockquote>
   <div id="code">
   
   
   ````suggestion
               # Verify requesting user has access to each specified resource
               dashboard_uuids = [resource["id"] for resource in 
body["resources"] if resource["type"] == GuestTokenResourceType.DASHBOARD.value]
               if dashboard_uuids:
                   from superset.models.embedded_dashboard import 
EmbeddedDashboard  # noqa: PLC0415
                   embedded_dashboards = 
db.session.query(EmbeddedDashboard).filter(EmbeddedDashboard.uuid.in_(dashboard_uuids)).all()
                   for embedded in embedded_dashboards:
                       if not 
self.appbuilder.sm.can_access_dashboard(embedded.dashboard):
                           raise ForbiddenError()
   ````
   
   </div>
   </details>
   
   
   
   </div>
   
   
   
   
   <small><i>Code Review Run #b2d947</i></small>
   </div>
   
   ---
   Should Bito avoid suggestions like this for future reviews? (<a 
href=https://alpha.bito.ai/home/ai-agents/review-rules>Manage Rules</a>)
   - [ ] Yes, avoid them



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to