Multi-tenancy: impersonate has no effect inside a tenant (MT-1, MT-15)

The ceiling always disables impersonate for principals in a tenant, so no
tenant setting or grant lets them reach accounts beyond it.
This commit is contained in:
2026-09-18 18:51:42 -07:00
parent ac2232c98d
commit ec4d668bc4
2 changed files with 55 additions and 0 deletions
+53
View File
@@ -523,6 +523,59 @@ pub async fn test(test: &mut TestServer) {
"test 9, outside a tenant"
);
// MT-15: impersonate has no effect in a tenant, even when the tenant
// allows it and the user holds it
admin
.registry_update_object(
ObjectType::Tenant,
p_id,
json!({
Property::Permissions: Permissions::Merge(PermissionsList {
enabled_permissions: Map::new(vec![Permission::Impersonate]),
disabled_permissions: Map::default(),
})
}),
)
.await;
admin
.registry_update_object(
ObjectType::Account,
p_user.id(),
json!({
Property::Permissions: Permissions::Merge(PermissionsList {
enabled_permissions: Map::new(vec![Permission::Impersonate]),
disabled_permissions: Map::default(),
})
}),
)
.await;
assert!(
!test
.permissions_of(p_user.id())
.await
.has_permission(Permission::Impersonate),
"MT-15: impersonate"
);
assert_eq!(
p_user
.jmap_method_call(
"Mailbox/get",
json!({ "accountId": admin.id_string(), "ids": null }),
)
.await
.method_response()
.text_field("type"),
"forbidden",
"MT-1: no reach into another account's mail"
);
admin
.registry_update_object(
ObjectType::Tenant,
p_id,
json!({ Property::Permissions: Permissions::Inherit }),
)
.await;
// Acceptance test 10: disabled wins over enabled in Replace (MT-14)
admin
.registry_update_object(