From ac06e7f4a31a86608719a7b7c5c4e783b63b427d Mon Sep 17 00:00:00 2001 From: LinYushen Date: Thu, 2 Apr 2026 12:13:45 +0800 Subject: [PATCH] fix(agent): restrict agent management to owner and workspace admins (#320) Members could previously modify any workspace-visible agent. Now only the agent owner or workspace owner/admin can update or delete an agent, regardless of visibility. Co-authored-by: Claude Opus 4.6 (1M context) --- server/internal/handler/agent.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/server/internal/handler/agent.go b/server/internal/handler/agent.go index 0818e8e2..c69dfe3a 100644 --- a/server/internal/handler/agent.go +++ b/server/internal/handler/agent.go @@ -328,21 +328,18 @@ type UpdateAgentRequest struct { } // canManageAgent checks whether the current user can update or delete an agent. -// Workspace-visible agents can be managed by any workspace member. -// Private agents can only be managed by their owner or workspace owner/admin. +// Only the agent owner or workspace owner/admin can manage any agent, +// regardless of whether it is public or private. func (h *Handler) canManageAgent(w http.ResponseWriter, r *http.Request, agent db.Agent) bool { wsID := uuidToString(agent.WorkspaceID) member, ok := h.requireWorkspaceRole(w, r, wsID, "agent not found", "owner", "admin", "member") if !ok { return false } - if agent.Visibility != "private" { - return true - } isAdmin := roleAllowed(member.Role, "owner", "admin") isAgentOwner := uuidToString(agent.OwnerID) == requestUserID(r) if !isAdmin && !isAgentOwner { - writeError(w, http.StatusForbidden, "only the agent owner can manage this private agent") + writeError(w, http.StatusForbidden, "only the agent owner can manage this agent") return false } return true