From ccf0057ea8f715cfa1e82d3e546271c8f659cc91 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 8 Mar 2026 14:32:59 -0700 Subject: [PATCH] iam: add group side effects on user deletion and rename When a user is deleted, remove them from all groups they belong to. When a user is renamed, update group membership references. Applied to both embedded and standalone IAM handlers. --- weed/iamapi/iamapi_management_handlers.go | 4 ++++ weed/s3api/s3api_embedded_iam.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/weed/iamapi/iamapi_management_handlers.go b/weed/iamapi/iamapi_management_handlers.go index 78c580821..5449a5d9f 100644 --- a/weed/iamapi/iamapi_management_handlers.go +++ b/weed/iamapi/iamapi_management_handlers.go @@ -219,6 +219,8 @@ func (iama *IamApiServer) DeleteUser(s3cfg *iam_pb.S3ApiConfiguration, userName } } s3cfg.Identities = append(s3cfg.Identities[:i], s3cfg.Identities[i+1:]...) + // Remove user from all groups + removeUserFromAllGroups(s3cfg, userName) return resp, nil } } @@ -258,6 +260,8 @@ func (iama *IamApiServer) UpdateUser(s3cfg *iam_pb.S3ApiConfiguration, values ur } } } + // Update group membership references + updateUserInGroups(s3cfg, userName, newUserName) return resp, nil } } diff --git a/weed/s3api/s3api_embedded_iam.go b/weed/s3api/s3api_embedded_iam.go index a33d0c57e..320d8e22e 100644 --- a/weed/s3api/s3api_embedded_iam.go +++ b/weed/s3api/s3api_embedded_iam.go @@ -315,6 +315,15 @@ func (e *EmbeddedIamApi) DeleteUser(s3cfg *iam_pb.S3ApiConfiguration, userName s } } s3cfg.Identities = append(s3cfg.Identities[:i], s3cfg.Identities[i+1:]...) + // Remove user from all groups + for _, g := range s3cfg.Groups { + for j, m := range g.Members { + if m == userName { + g.Members = append(g.Members[:j], g.Members[j+1:]...) + break + } + } + } return resp, nil } } @@ -342,6 +351,15 @@ func (e *EmbeddedIamApi) UpdateUser(s3cfg *iam_pb.S3ApiConfiguration, values url for _, ident := range s3cfg.Identities { if userName == ident.Name { ident.Name = newUserName + // Update group membership references + for _, g := range s3cfg.Groups { + for j, m := range g.Members { + if m == userName { + g.Members[j] = newUserName + break + } + } + } return resp, nil } }