Proxy verbs: promote manager-tier guards to sub-verb rows, re-gate clients #135

Closed
opened 2026-08-18 10:45:26 +00:00 by nalum · 0 comments
Owner

From the RBAC matrix breakdown (2026-08-16), findings 2 and 4.

Both clients elect one verb to "stand for the manager tier" and gate actions it does not name. These break silently if the matrix ever splits a role's verbs, and web and Android even disagree on which wrong verb to use.

Web proxies: Jobs.tsx:224 / Today.tsx:162 (ItemService/Delete gates edit mode, owner reassign, step points → RewardService/Create cross-service), ListDetail.tsx:45 (ItemListService/Update gates UncheckAll, Delete, entry reassign, convert-to-job), Meals.tsx:62-63, Rewards.tsx:88.

Android proxies: ItemSheets.kt:227 / Jobs.kt:80, Home.kt:507 (divergence — proxies the list screen with Create where web uses Update), ItemSheets.kt:1211, Rewards.kt:170, Meals.kt:76 (divergence — meal edit gated on Create; web correctly uses Update), Meals.kt:77.

Proposed fix (extends ADR-0031, needs an ADR update): add sub-verb rows for the role-only halves so clients stop proxying:

  • the Admin|Member manager bucket behind RequireItemManager (replaces the ItemService/Delete proxy on three surfaces),
  • Claim.other for admin-claims-on-behalf,
  • the admin half of non-self ExportUserData.

Then re-gate every proxy site on the verb it actually performs.

From the RBAC matrix breakdown (2026-08-16), findings 2 and 4. Both clients elect one verb to "stand for the manager tier" and gate actions it does not name. These break silently if the matrix ever splits a role's verbs, and web and Android even disagree on which wrong verb to use. Web proxies: `Jobs.tsx:224` / `Today.tsx:162` (`ItemService/Delete` gates edit mode, owner reassign, step points → RewardService/Create cross-service), `ListDetail.tsx:45` (`ItemListService/Update` gates UncheckAll, Delete, entry reassign, convert-to-job), `Meals.tsx:62-63`, `Rewards.tsx:88`. Android proxies: `ItemSheets.kt:227` / `Jobs.kt:80`, `Home.kt:507` (**divergence** — proxies the list screen with `Create` where web uses `Update`), `ItemSheets.kt:1211`, `Rewards.kt:170`, `Meals.kt:76` (**divergence** — meal edit gated on `Create`; web correctly uses `Update`), `Meals.kt:77`. Proposed fix (extends ADR-0031, needs an ADR update): add sub-verb rows for the role-only halves so clients stop proxying: - the Admin|Member manager bucket behind `RequireItemManager` (replaces the `ItemService/Delete` proxy on three surfaces), - `Claim.other` for admin-claims-on-behalf, - the admin half of non-self `ExportUserData`. Then re-gate every proxy site on the verb it actually performs.
nalum closed this issue 2026-08-18 16:44:00 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app#135
No description provided.