Skip to content

Commit 33c87b6

Browse files
committed
fix: Authenticated IDOR in Dashboard update endpoints allows cross-user Dashboard modification
1 parent 835d0b1 commit 33c87b6

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

backend/apps/dashboard/crud/dashboard_service.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,16 @@ def create_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDas
7979

8080

8181
def update_resource(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
82-
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
82+
# 添加权限检查:只能更新自己创建的、且在自己工作空间的 Dashboard
83+
record = session.query(CoreDashboard).filter(
84+
CoreDashboard.id == dashboard.id,
85+
CoreDashboard.create_by == str(user.id),
86+
CoreDashboard.workspace_id == str(user.oid if user.oid is not None else 1)
87+
).first()
88+
89+
if not record:
90+
raise ValueError(f"Dashboard with id {dashboard.id} does not exist or you do not have permission to update it")
91+
8392
record.name = dashboard.name
8493
record.update_by = user.id
8594
record.update_time = int(time.time())
@@ -102,7 +111,16 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb
102111

103112

104113
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
105-
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
114+
# 添加权限检查:只能更新自己创建的、且在自己工作空间的 Dashboard
115+
record = session.query(CoreDashboard).filter(
116+
CoreDashboard.id == dashboard.id,
117+
CoreDashboard.create_by == str(user.id),
118+
CoreDashboard.workspace_id == str(user.oid if user.oid is not None else 1)
119+
).first()
120+
121+
if not record:
122+
raise ValueError(f"Dashboard with id {dashboard.id} does not exist or you do not have permission to update it")
123+
106124
record.name = dashboard.name
107125
record.update_by = user.id
108126
record.update_time = int(time.time())

0 commit comments

Comments
 (0)