diff --git a/lib/Controller/DashboardShareApiController.php b/lib/Controller/DashboardShareApiController.php index 8d3145ef..587a8fc1 100644 --- a/lib/Controller/DashboardShareApiController.php +++ b/lib/Controller/DashboardShareApiController.php @@ -300,6 +300,13 @@ public function revokeForRecipient( * @return DataResponse The matching users and groups. * * @spec openspec/specs/dashboard-sharing/spec.md + * + * @no-admin-idor-exempt no object is addressed. The only parameter is a + * search string; the method reads no dashboard and no share, and returns + * the same directory any authenticated user already sees through the core + * share picker. It null-checks `$this->userId`, excludes the caller from + * its own results, blocks single-character sweeps as a directory + * enumeration guard, and bounds both searches to 10 rows. */ #[NoAdminRequired] public function searchSharees(string $query = ''): DataResponse { diff --git a/lib/Controller/VisibilityPreviewController.php b/lib/Controller/VisibilityPreviewController.php index 6e4f98fa..2be7e008 100644 --- a/lib/Controller/VisibilityPreviewController.php +++ b/lib/Controller/VisibilityPreviewController.php @@ -90,6 +90,13 @@ public function __construct( * fail validation. * * @spec openspec/specs/conditional-visibility-editor/spec.md#requirement-req-cvui-005-preview-endpoint-reuses-the-render-time-evaluation-path-and-never-persists + * + * @no-admin-idor-exempt no object is addressed. Both parameters are the + * candidate rule set and an evaluation context taken from the request + * body; the method loads nothing by id, persists nothing, and evaluates + * against `$this->userId` — which it null-checks — so there is no other + * user's object for a caller to reach. An IDOR needs an attacker-supplied + * identifier, and this endpoint accepts none. */ #[NoAdminRequired] public function preview( diff --git a/lib/Service/DashboardVersionService.php b/lib/Service/DashboardVersionService.php index d0d6138c..a853f9e7 100644 --- a/lib/Service/DashboardVersionService.php +++ b/lib/Service/DashboardVersionService.php @@ -527,24 +527,6 @@ public function restoreVersion( ]; }//end restoreVersion() - /** - * Cascade-delete every snapshot row for a dashboard. - * - * Designed to be called from the dashboard delete path or, in the - * future, the cascade-events VersionsListener stub. Idempotent. - * - * @param string $dashboardUuid The dashboard UUID. - * - * @return integer The number of rows deleted. - * - * @spec openspec/specs/dashboard-versioning/spec.md - */ - public function deleteVersionsForDashboard(string $dashboardUuid): int { - return $this->versionMapper->deleteByDashboardUuid( - dashboardUuid: $dashboardUuid - ); - }//end deleteVersionsForDashboard() - /** * Whether the supplied dashboard is groupfolder-backed * (REQ-VERS-008). Currently always false because the groupfolder diff --git a/src/components/Widgets/Renderers/NewsWidget.vue b/src/components/Widgets/Renderers/NewsWidget.vue index 24cf65eb..86b50fc1 100644 --- a/src/components/Widgets/Renderers/NewsWidget.vue +++ b/src/components/Widgets/Renderers/NewsWidget.vue @@ -74,11 +74,16 @@