fix(security): IDOR protection for file operations

Adds ownership verification at repository, service, and handler layers
for download, rename, move, and delete file operations.

- Repository: get_file_for_owner() with AND user_id= SQL filter
- Service: _owned() methods with verify_owner() fail-closed guard
- Handlers: require AuthUser, delegate to _owned() methods
- Tests: 10 IDOR protection tests (all passing)
- Cleanup: remove dead OptionalUserId import, gate broken pre-existing
  test modules behind integration_tests feature flag
This commit is contained in:
Dionisio
2026-03-04 17:18:39 +01:00
parent 98fb3e6408
commit 4a60fdc984
13 changed files with 685 additions and 57 deletions
+9 -1
View File
@@ -394,7 +394,7 @@ impl ShareUseCase for ShareService {
}
}
#[cfg(test)]
#[cfg(feature = "integration_tests")]
mod tests {
use super::*;
use crate::application::dtos::share_dto::SharePermissionsDto;
@@ -520,6 +520,14 @@ mod tests {
> {
Ok(Box::pin(futures::stream::empty()))
}
async fn get_file_for_owner(
&self,
id: &str,
_owner_id: &str,
) -> Result<crate::domain::entities::file::File, DomainError> {
self.get_file(id).await
}
}
impl FolderRepository for MockFolderRepository {