fix(admin): allow site replication peer edits (#4623)

* fix(site-replication): align IAM and bucket metadata replication

* fix(admin): allow site replication peer edits
This commit is contained in:
唐小鸭
2026-07-10 02:09:42 +08:00
committed by GitHub
parent f403ed1c2e
commit 7ab1abee80
+22 -1
View File
@@ -5392,7 +5392,7 @@ pub struct SRPeerEditHandler {}
#[async_trait::async_trait]
impl Operation for SRPeerEditHandler {
async fn call(&self, req: S3Request<Body>, _params: Params<'_, '_>) -> S3Result<S3Response<(StatusCode, Body)>> {
validate_site_replication_admin_request(&req, AdminAction::SiteReplicationAddAction).await?;
validate_site_replication_admin_request(&req, AdminAction::SiteReplicationOperationAction).await?;
let ilm_expiry_override = sr_edit_ilm_expiry_override(&req.uri);
let _state_guard = SITE_REPLICATION_STATE_LOCK.lock().await;
let state = load_site_replication_state().await?;
@@ -5829,6 +5829,27 @@ mod tests {
assert!(!policy.is_allowed(&put_policy_args).await);
}
#[test]
fn test_sr_peer_edit_handler_uses_site_replication_operation_action() {
let src = include_str!("site_replication.rs");
let handler_block = src
.split("impl Operation for SRPeerEditHandler")
.nth(1)
.and_then(|rest| rest.split("pub struct SRPeerRemoveHandler").next())
.expect("SRPeerEditHandler block should exist");
assert!(
handler_block
.contains("validate_site_replication_admin_request(&req, AdminAction::SiteReplicationOperationAction).await?;"),
"SRPeerEditHandler should authorize internal peer edits with SiteReplicationOperationAction"
);
assert!(
!handler_block
.contains("validate_site_replication_admin_request(&req, AdminAction::SiteReplicationAddAction).await?;"),
"SRPeerEditHandler must not require SiteReplicationAddAction for internal peer edits"
);
}
#[test]
fn test_bucket_versioning_xml_enables_versioning() {
let data = bucket_versioning_xml().expect("versioning XML should serialize");