diff --git a/src/application/ports/file_ports.rs b/src/application/ports/file_ports.rs index 50ef37cc..d4135a2c 100644 --- a/src/application/ports/file_ports.rs +++ b/src/application/ports/file_ports.rs @@ -257,7 +257,7 @@ pub trait FileRetrievalUseCase: Send + Sync + 'static { /// Primary port for file management operations pub trait FileManagementUseCase: Send + Sync + 'static { - async fn has_permission( + async fn require_permission( &self, caller_id: Uuid, permission: Permission, diff --git a/src/application/ports/folder_ports.rs b/src/application/ports/folder_ports.rs index f34e61ad..8b547ef9 100644 --- a/src/application/ports/folder_ports.rs +++ b/src/application/ports/folder_ports.rs @@ -9,7 +9,7 @@ use crate::common::errors::DomainError; use crate::domain::services::authorization::Permission; pub trait FolderUseCase: Send + Sync + 'static { - async fn has_permission( + async fn require_permission( &self, caller_id: Uuid, permission: Permission, diff --git a/src/application/services/file_management_service.rs b/src/application/services/file_management_service.rs index 8f875a7b..797a1434 100644 --- a/src/application/services/file_management_service.rs +++ b/src/application/services/file_management_service.rs @@ -225,7 +225,7 @@ impl FileManagementService { } impl FileManagementUseCase for FileManagementService { - async fn has_permission( + async fn require_permission( &self, caller_id: Uuid, permission: Permission, diff --git a/src/application/services/folder_service.rs b/src/application/services/folder_service.rs index 03ba62ac..f962edcf 100644 --- a/src/application/services/folder_service.rs +++ b/src/application/services/folder_service.rs @@ -41,7 +41,7 @@ impl FolderService { struct FolderServiceStub; impl FolderUseCase for FolderServiceStub { - async fn has_permission( + async fn require_permission( &self, _caller_id: Uuid, _permission: Permission, @@ -175,7 +175,7 @@ impl FolderUseCase for FolderService { /// large request bodies (file upload, chunked upload). The authoritative /// check happens again inside the upload/management services before any /// DB write — this is a UX/resource optimization, not a security boundary. - async fn has_permission( + async fn require_permission( &self, caller_id: Uuid, permission: Permission, diff --git a/src/common/stubs.rs b/src/common/stubs.rs index ca4972a3..9b35f53c 100644 --- a/src/common/stubs.rs +++ b/src/common/stubs.rs @@ -356,7 +356,7 @@ impl I18nService for StubI18nService { pub struct StubFolderUseCase; impl FolderUseCase for StubFolderUseCase { - async fn has_permission( + async fn require_permission( &self, _caller_id: Uuid, _permission: Permission, @@ -637,7 +637,7 @@ impl FileRetrievalUseCase for StubFileRetrievalUseCase { pub struct StubFileManagementUseCase; impl FileManagementUseCase for StubFileManagementUseCase { - async fn has_permission( + async fn require_permission( &self, _caller_id: Uuid, _permission: Permission, diff --git a/src/interfaces/api/handlers/chunked_upload_handler.rs b/src/interfaces/api/handlers/chunked_upload_handler.rs index 10fbe900..893060bc 100644 --- a/src/interfaces/api/handlers/chunked_upload_handler.rs +++ b/src/interfaces/api/handlers/chunked_upload_handler.rs @@ -129,7 +129,7 @@ impl ChunkedUploadHandler { && let Err(err) = state .applications .folder_service_concrete - .has_permission(auth_user.id, Permission::Create, fid) + .require_permission(auth_user.id, Permission::Create, fid) .await { tracing::warn!( diff --git a/src/interfaces/api/handlers/file_handler.rs b/src/interfaces/api/handlers/file_handler.rs index 4ffbac29..b303ef76 100644 --- a/src/interfaces/api/handlers/file_handler.rs +++ b/src/interfaces/api/handlers/file_handler.rs @@ -124,7 +124,7 @@ impl FileHandler { && let Err(err) = state .applications .folder_service_concrete - .has_permission(auth_user.id, Permission::Create, fid) + .require_permission(auth_user.id, Permission::Create, fid) .await { tracing::warn!( @@ -333,7 +333,7 @@ impl FileHandler { if let Err(err) = state .applications .file_management_service - .has_permission(auth_user.id, Permission::Read, &id) + .require_permission(auth_user.id, Permission::Read, &id) .await { return AppError::from(err).into_response(); @@ -493,7 +493,7 @@ impl FileHandler { if let Err(err) = state .applications .file_management_service - .has_permission(auth_user.id, Permission::Update, &id) + .require_permission(auth_user.id, Permission::Update, &id) .await { return AppError::from(err).into_response(); @@ -855,7 +855,7 @@ impl FileHandler { if let Err(err) = state .applications .file_management_service - .has_permission(auth_user.id, Permission::Read, &file_id) + .require_permission(auth_user.id, Permission::Read, &file_id) .await { return AppError::from(err).into_response(); diff --git a/tests/api/grants.hurl b/tests/api/grants.hurl index 54e593e6..059efd08 100644 --- a/tests/api/grants.hurl +++ b/tests/api/grants.hurl @@ -320,7 +320,7 @@ jsonpath "$" count == 0 # · GET /{id}/metadata · GET /{id}/thumbnail/{size} # · PUT /{id}/thumbnail/{size} (push, Update) # · PUT /{id}/rename · PUT /{id}/move · DELETE /{id} -# · POST /upload (via folder has_permission) +# · POST /upload (via folder require_permission) # # Listing endpoints that are still owner-scoped (GET /api/folders root, # GET /api/folders/paginated) are NOT covered here — they don't @@ -476,7 +476,7 @@ Authorization: Bearer {{adam_token}} HTTP 404 # ── Chunked upload: cannot start session in alice's folder ── -# create_upload_impl pre-checks Permission::Create via has_permission. +# create_upload_impl pre-checks Permission::Create via require_permission. POST {{base_url}}/api/uploads Authorization: Bearer {{adam_token}} Content-Type: application/json