fix(issue-541): move PATCH /budget to adminAuth — workspace must not self-clear ceiling
Workspace agents could previously call PATCH /workspaces/:id/budget with their own bearer token and set budget_limit=null, defeating the entire spend enforcement feature. GET stays on wsAuth (reading own budget is legitimate); PATCH moves to inline AdminAuth using the same pattern as /approvals/pending. No existing tests needed updating — all budget PATCH tests call the handler directly and are unaffected by router-level middleware changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
9223486756
commit
b2f8997afe
@ -257,10 +257,12 @@ func Setup(hub *ws.Hub, broadcaster *events.Broadcaster, prov *provisioner.Provi
|
||||
r.GET("/workspaces/:id/schedules/health", schedh.Health)
|
||||
|
||||
// Budget — per-workspace spend ceiling and current usage (#541).
|
||||
// GET returns the current state; PATCH sets or clears the ceiling.
|
||||
// GET stays on wsAuth — a workspace agent reading its own budget is legitimate.
|
||||
// PATCH is admin-only — workspace agents must not be able to self-clear their
|
||||
// spending ceiling (that would defeat the entire budget enforcement feature).
|
||||
budgeth := handlers.NewBudgetHandler()
|
||||
wsAuth.GET("/budget", budgeth.GetBudget)
|
||||
wsAuth.PATCH("/budget", budgeth.PatchBudget)
|
||||
r.PATCH("/workspaces/:id/budget", middleware.AdminAuth(db.DB), budgeth.PatchBudget)
|
||||
|
||||
// Token management (user-facing create/list/revoke)
|
||||
tokh := handlers.NewTokenHandler()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user