Skip to main content

Who can do what

This page shows which default role may use each button of the Inventory Balances screens, and which web action and API right stand behind it. It describes the defaults that a new database gets. An administrator can change every cell in Users & Roles > Permission Matrix. A change made there wins over this page.

Two gates apply to a button:

  1. The web action. The server checks that the role may run the action behind the button. A refusal reads Forbidden("{action}").
  2. The API right. The action calls an API method. The method has its own list of roles.

A button works only when both gates are open. ADMIN and MANAGER pass every gate on this page.

The web actions on these screens​

Web actionUsed bySUPERVISOROPERATORVIEWER
generic_rpc_query, generic_rpc_form_load, generic_refresh, query_list_formEvery list, every form load, RefreshYesYesYes
generic_new, generic_save, generic_validateNew, Save, Add Line, Add Locations, New HoldYesYesNo
generic_rpc_commandValidate, Approve, Post, Reverse, Delete, From Stock, the count buttons, Count After Posting, Do Not CountYesYesNo
balance_moveMove on the Move stock documentYes (baseline grant)Yes (baseline grant)No
putaway_release_reservationRelease on Pending Move-InYes (baseline grant)NoNo

Source: crates/libs/wms-lib-auth/src/authorization/seeder.rs:35-200; the baseline grants in crates/libs/wms-lib-sql/sql/wms-app/migrations/001_baseline.sql:19903,20015,20020. Because generic_rpc_command is open to OPERATOR and SUPERVISOR, what stops them on the buttons below is the API right, not the web action.

Screens and buttons​

Yes means both gates are open by default.

WhatAPI methodSUPERVISOROPERATORVIEWER
Open the Balances tabs (lists)list_inventory_balance, _by_container, _by_sku, _by_lot, _on_hold, list_inventory_balance_serialYes (baseline grants)YesYes
The tab countscount_inventory_balance..., count_inventory_balance_serialYesYesYes
Open Episodeslist_serial_capture_episode_openYesYesYes
Summary striplist_inventory_balance_kpiYesYesYes
Movemove_execute (and generate_lpn, print_lpn_label for a new LPN)Yes (baseline grant)Yes (baseline grant)No
Open the Holds listlist_inventory_hold_detailYesYesYes
New Hold, Save a holdcreate_inventory_hold_rowNoNoNo
Save the note of a holdupdate_inventory_holdNoNoNo
Release a holdrelease_inventory_hold (API only, no button)NoNoNo
Open Adjustments, Counts, Reasonsinventory_adjustment_list, inventory_count_list, inventory_adjust_reason_list and their card methodsYesNoYes
New, Save, Add Line, From Stock, Validate, Post, Reverse, Delete (adjustments)create_inventory_adjustment, create_inventory_adjustment_line, inventory_adjustment_generate_lines, inventory_adjustment_validate, inventory_adjustment_post, inventory_adjustment_reverse, inventory_adjustment_delete, inventory_adjustment_remove_line, update_...YesNoNo
Approveinventory_adjustment_approveNoNoNo
Count After Posting, Do Not Countinventory_adjust_reason_set_countNoNoNo
New, Save, Add Locations, Remove Location, Accept Variance, Recount, Cancel Count, Delete (counts)create_inventory_count, inventory_count_add_locations, inventory_count_remove_location, inventory_count_accept, inventory_count_recount, inventory_count_cancel, inventory_count_deleteYesNoNo
Count on the RF terminalinventory_count_task_take_next, _at_location, _leave, inventory_count_observe, _void_observation, _confirm_empty, inventory_count_completeYesYesNo
Open Transactions (list)list_transaction_logYes (baseline grant)YesYes
Open a transaction (detail)get_transaction_logYesYesYes
Open Pending Move-Inlist_inventory_pending_move_in_uiYesYesYes
Release a reservationputaway_release_reservationYesNo (web action)No

Source of the API cells: the declare_rpc_module! lists in crates/services/app-server/src/web/rpcs/inventory_rpc.rs, inventory_balance_serial_rpc.rs, hold_rpc.rs, inventory_adjustment_rpc.rs, inventory_count_rpc.rs, transaction_log_rpc.rs, move_command_rpc.rs, putaway_rpc.rs; and the baseline grants of OPERATOR and SUPERVISOR in 001_baseline.sql:19866-20020.

How the cells were found​

CellSource
ADMIN, MANAGERThe server action policy gives them every action (default_server_action_grant). The API lists name both of them for every method here.
Adjustments and counts: SUPERVISOR yes, OPERATOR noThe module comments: drafting and posting adjustments and the decisions of a count are the supervisor's (inventory_adjustment_rpc.rs:1-6, inventory_count_rpc.rs:1-14).
Approve: ADMIN, MANAGER onlyinventory_adjustment_rpc.rs:44-45: approval is its own grant.
Baseline grantsThe baseline file gives OPERATOR and SUPERVISOR rows for move_execute, putaway_release_reservation and a list of read methods. A method without a baseline row takes its default from the declare_rpc_module! list.

Inconsistencies seen​

  • move_execute is listed for ADMIN and MANAGER only in its module (move_command_rpc.rs:26), yet the baseline grants it to OPERATOR and SUPERVISOR, and the web action balance_move is granted to them too. In practice OPERATOR can move stock on the web.
  • OPERATOR and SUPERVISOR hold the web action generic_save, but create_inventory_hold_row is for ADMIN and MANAGER only, so New Hold is refused by the API.
  • Count After Posting is a button of a screen that SUPERVISOR reads, but only ADMIN and MANAGER may press it.

Not confirmed by code: the exact refusal text a role sees on each button. To verify: sign in as OPERATOR and press New Hold, then open Inventory Adjustments.