From 38a08bf5cff58bc8b120f209cd4fe95cbe45bfbb Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Mon, 14 Sep 2026 13:32:16 +0200 Subject: [PATCH] docs: note unsupported column grants and why a move keeps self-defaults Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01BRoYE5ZeAVvrDYdfhDAYXb --- backend/windmill-api-workspaces/src/datatable_acl.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/windmill-api-workspaces/src/datatable_acl.rs b/backend/windmill-api-workspaces/src/datatable_acl.rs index a19416788a..42e16831d9 100644 --- a/backend/windmill-api-workspaces/src/datatable_acl.rs +++ b/backend/windmill-api-workspaces/src/datatable_acl.rs @@ -545,7 +545,8 @@ async fn read_former_owner_defaults( JOIN pg_default_acl d ON d.defaclnamespace = n.oid CROSS JOIN LATERAL aclexplode(d.defaclacl) a WHERE n.nspname = $1 AND a.grantee = n.nspowner - -- What the owner gives itself on what it creates adds nothing to owning it. + -- What the owner gives itself is about the objects it creates, not about owning + -- the schema, so a move leaves it alone. AND a.grantee <> d.defaclrole AND d.defaclobjtype IN ('r', 'S', 'f', 'T') AND n.nspowner <> (SELECT oid FROM pg_roles WHERE rolname = $2) @@ -1061,6 +1062,8 @@ async fn read_grants(client: &tokio_postgres::Client, target: &AclTarget) -> Res // not with a grant a revoke here could take back. Each row ends with its source — the grantor, // or a default privilege's creating role — and whether this connection can take back what it // gave. + // Column-level grants (`pg_attribute.attacl`) are not supported yet: they are neither read here + // nor revocable from the editor. let mut rows = match target { AclTarget::Database => { let mut out = client