diff --git a/frappe/core/doctype/server_script/server_script.py b/frappe/core/doctype/server_script/server_script.py index aef07227c6..cfdf0ab2f1 100644 --- a/frappe/core/doctype/server_script/server_script.py +++ b/frappe/core/doctype/server_script/server_script.py @@ -211,6 +211,7 @@ class ServerScript(Document): Args: user (str): Take user email to execute script and return list of conditions. + active_child_tables (list, optional): A list of child table names involved in the current SQL query. Return: list: Return list of conditions defined by rules in self.script. @@ -218,8 +219,7 @@ class ServerScript(Document): locals = { "user": user, "conditions": "", - "active_child_tables": active_child_tables - or [], # add 'active_child_tables' to the locals dictionary + "active_child_tables": active_child_tables or [], } safe_exec(self.script, None, locals, script_filename=self.name) if locals["conditions"]: diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index a32cf1215b..c67d6a2aa0 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -1151,17 +1151,16 @@ from {tables} conditions.append(c) active_child_tables = [] - if hasattr(self, "tables") and len(self.tables) > 1: # only if query has multiple tables involved + if len(self.tables) > 1: # only if query has multiple tables involved for table_name in self.tables: - # skip parent table (user_permissions are already applied) if table_name != f"`tab{self.doctype}`": - active_child_tables.append(table_name) # track child tables + active_child_tables.append(table_name) if permission_script_name := get_server_script_map().get("permission_query", {}).get(self.doctype): script = frappe.get_doc("Server Script", permission_script_name) if condition := script.get_permission_query_conditions( self.user, active_child_tables=active_child_tables - ): # parse tracked child tables + ): conditions.append(condition) return " and ".join(conditions) if conditions else ""