When you invite a vendor into your workspace, you are not creating a limited member of your team. You are opening a separate door onto 24 routes, every one of which re-checks that the record in front of it belongs to that supplier before it renders a line of it. There is no role to misconfigure, because a supplier has no role — the boundary is structural, and this page is about exactly where it runs.
The safest permission is the one that was never granted, and a supplier has none at all.
The usual way to build a supplier portal is to create a stripped-down user with a “Vendor” role, and it works right up until somebody edits that role on a Thursday. Suppliers here authenticate against a separate guard entirely. They are not users, they hold none of the 258 permissions in the role catalogue, and no change an administrator makes to a role can widen what a supplier sees.
Scoped at the query, not at the view
Every supplier-facing lookup filters on that supplier's own id and fails to find anything else. Change the number in the address bar and you get a not-found — not a permission error, because as far as the query is concerned the record does not exist. Hiding a row in the template and fetching it anyway is the version of this that passes a screenshot review and fails a penetration test.
The one attachment route, and its extra lock
Suppliers can download the file on their own quotation. That route is the single documented exception in our access-control map, because it runs on the supplier guard and so has no role permission to declare. The controller earns it a different way: it matches the tenant and the quotation's own supplier id, so a supplier can only ever reach their own document.
Every write is rate-limited separately
Quote submission, PO acceptance, rejection, closure and shipping updates each sit behind a throttle of their own, on top of the throttle applied to the whole portal. A supplier integration gone wrong is a nuisance in your procurement queue rather than an outage.
The boundary
A supplier can tell you what they have done. They cannot tell you what you have received.
This is the line that matters, and most portals put it in the wrong place. A supplier who can mark an order delivered can close out your receiving obligation from their own office, and the first person to discover the discrepancy is a storekeeper with a clipboard and no leverage. So the portal splits every fact into two kinds: things the supplier is the authority on, and things only your own people can assert.
The supplier decides these
Their price, lead time, terms, notes and attachments on a quotation.
Whether they accept or reject a purchase order you have raised.
Whether an accepted order has left their premises — not shipped, or in transit.
Whether to revise a quotation they have already submitted, with the earlier version still on the record.
Whether to agree that a fully-paid order is finished and can be closed.
Only your side decides these
That the goods arrived. Delivered is a receiving event on your premises, recorded by your storekeeper.
What quantity actually turned up, and in what condition.
That the order has been paid. Payment status is set on your ledger, and the supplier reads it.
Which suppliers were invited to an RFQ, and which quotation won it.
Anything at all about your stock, your other suppliers, your pricing or your people.
The shipping control is a two-value field on purpose. A supplier sets it to in-transit and the system issues a tracking reference; move it back and the reference is withdrawn. Once your own receiving or a cancellation has decided the order, the control locks entirely and says why — so a supplier cannot reopen a shipping conversation about goods you have already booked in.
One order, four facts, two authorities
Read across a purchase order and you can see which organisation put each field there.
This is a real order as both sides see it. The supplier and the buyer are looking at one record, not at two copies being reconciled by email — but each field still has exactly one owner, and neither side can write the other's.
Buyer wrote this
PO-2026-0912
Raised against the winning quotation, with the sourcing decision still attached to it.
Supplier wrote this
Vendor accepted
The commitment. Until this exists, the buyer has an order and no promise against it.
Supplier wrote this
in_transit
It has left them. A tracking reference was issued when they said so.
Buyer wrote this
Received · 84 of 90
Counted at the bay by your storekeeper. The six-unit shortfall is now a conversation with evidence.
How a supplier gets in
You create the account. You never know the password.
A buyer setting up a supplier's credentials and reading them down the phone is the ordinary way this goes wrong: the buyer has now held the supplier's password, and every later action from that login is arguable. The first sign-in is built to make that impossible.
01
You add the supplier from your vendor list
Name, contact, email. The record is the same one your purchase orders already point at, so a portal login is a capability added to a supplier you already trade with rather than a second, parallel supplier record to keep in step.
02
Their first sign-in refuses and sends them a set-password link
An account that has never had a password set, or that is flagged to change one, is signed straight back out at the door and emailed a link instead. The attempt is written to the security log with its reason, so an administrator can see the handover happened without ever seeing the credential.
03
Your multi-factor policy applies to them, not yours to you only
The supplier's sign-in reads the multi-factor policy set on your workspace. If you require it, they are challenged before a session exists; if you recommend it, they get the same reminder cadence your own staff get, with the same snooze. A supplier who can accept a six-figure order is a person signing into your procurement process, and your policy is the one that should govern it.
04
The session behaves like every other session in the workspace
Supplier sessions run through the same timeout, the same audit logging and the same request profiling as your internal team's. There is no quieter, older code path for the external door — which is usually where the quieter, older code path is.
Extending the portal
The questions you ask suppliers are yours, so the fields on their form are too.
Every organisation has two or three things it needs from a supplier that no product ships with: a batch reference, a driver's name, a compliance certificate number, the gate the lorry should use. Custom fields defined on your purchase orders appear on the supplier's form, are validated by your rules when they submit, and are saved against the same record your own team reads.
Asked at the moment they can answer
A field on the supplier's acceptance form gets answered while the supplier is deciding whether to accept. The same question asked afterwards, by email, gets answered by whoever reads the email first — and usually a week later, into a thread nobody attaches to the order.
The fields apply to acceptance, rejection, closure and shipping updates alike, so you can require a reason on a rejection without requiring one on an acceptance.
Validated by your rules, on your side
The supplier's submission is validated against the field definitions held in your workspace before anything is written. A required field is required; a field with a format has that format enforced. The supplier is not trusted to have filled the form in correctly, which is the correct posture towards any input arriving from another organisation.
Custom fields on the portal are the same mechanism used across employees, tickets, projects, tasks and expenses — one definition surface, not a per-module reimplementation.
Do not take our word for it
Every claim on this page can be tested from a trial workspace in about ten minutes.
Access-control claims are the easiest thing in software to write and the hardest to verify from the outside, which is why so many of them are written. These are ours, in the order you would check them, with what you should see.
01
Add two suppliers, and raise an order against each
Give both a portal login. You now have two doors into one workspace and a record behind each of them, which is the only arrangement that tests anything.
02
Sign in as the first supplier and edit the address bar
Open their purchase order, then change the identifier in the URL to the second supplier's. You should get a not-found, not a forbidden and not a blank page with the other supplier's total still in the tab title.
03
Look for a way to mark the order delivered
Accept the order, then open the shipping control. There are two values in it and delivered is not one of them. Then book the goods in from the buyer's side and go back — the control is now locked and tells you why.
04
Try to close an order that has not been paid
The close is refused with the reason. Mark the order paid on your own ledger, go back, and the same button now works — because the condition was a fact on your side all along.
05
Turn on required multi-factor in your own security settings
Then sign the supplier out and back in. They are challenged, from your policy, on an account you did not configure — and their session times out on your timeout.
06
Go looking for anything else
Stock levels, your other suppliers, prices you paid last quarter, the names of your staff. There is no navigation to them and no route that serves them, which is a duller answer than a permission matrix and a considerably stronger one.
Before you promise a supplier something
What the portal is today, and what we would build onto it.
Vendor collaboration portal — the access model, without the adjectives
What AWRA OpsHub does today
A separate authentication guard for suppliers, holding no role and none of the workspace permission catalogue, so a role edit cannot widen supplier access.
Record-level scoping on every supplier query — a purchase order, quotation or RFQ that is not theirs is not found rather than forbidden.
A 24-route surface, 12 read and 12 write, with each write action separately rate-limited.
Shipping status the supplier can set to in-transit but not to delivered, locking entirely once your receiving or a cancellation has decided the order.
Mutual close on a purchase order, available to the supplier only once the order is fully paid on your ledger.
A forced set-password handover on first sign-in, recorded in the security log, so the buyer never holds the supplier's credential.
Your workspace's multi-factor policy applied to supplier sign-ins, with the same enforcement and reminder cadence as your internal team.
Your custom fields on the supplier's own forms, validated by your definitions before anything is written.
Session timeout, audit logging and request profiling on the supplier session, from the same middleware stack as every other session.
More we can add to your workspace
Several named logins under one supplier, so a sales contact and an accounts contact each sign in as themselves and the record shows which of them accepted the order.
Supplier-initiated document upload outside a quotation — a certificate of insurance or a tax compliance certificate the supplier keeps current in your workspace on their own.
A message thread on the order itself, so a clarification lives on the purchase order rather than in the email you both fall back to.
Advance shipping notices with line detail, letting a supplier declare what is on the lorry before it arrives so receiving can be prepared against it.
Supplier-visible payment scheduling, showing a supplier when an approved invoice is due rather than only that it is unpaid.
A supplier-facing API and webhooks, for the larger suppliers who would rather their own system answered your RFQs than a person did.
Portal access that expires on a date you set, for a supplier engaged for one project or one season.
Where we point you to a specialist
We will not let a supplier assert receipt of goods. That is the one line we would decline to move even on request — the whole value of a two-party record is that the receiving fact comes from the party that received.
We hold your supplier relationship, not your supplier contract. Whether a rejection entitles you to anything, and what your terms say about a late delivery, is a question for your own counsel and we point you there.
We point you to your own procurement policy on who may award. The portal records which quotation won and who decided; whether that person was entitled to decide is a control you set in roles, and not one we would set for you.
Everything in the middle column is scoped work on a portal that already has the guard, the scoping, the throttles and the custom-field layer to hang it on. Tell us which row your suppliers keep asking for.
The other two supplier pages
This page is the boundary. These are the work and the judgement.
Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.
We use necessary cookies for secure sessions. With your permission, we also use cookies and browser storage for preferences, analytics, and demo engagement. Privacy Policy
AWRA OpsHub
Cookie settings
Cookie Consent Manager
Necessary cookies stay on for login, CSRF protection, and security. You can choose the optional categories below.
Overview
General Information
AWRA uses cookies and browser storage to keep public pages secure, remember selected preferences, measure website performance, and manage demo engagement prompts.
You can choose whether functional and marketing engagement storage apply. Analytics measurement is always active in this AWRA setup.
These settings apply to AWRA public website experiences such as the homepage, feature pages, pricing calculator, blog, help center, and request-demo page. Authenticated dashboard and vendor portal sessions still rely on required security cookies.
Required
Always active
Functional
Optional
Analytics
Always active
Marketing
Optional
For more context on privacy handling, open the Privacy Policy.
Required Cookies
Required Cookies
Always Active
Required cookies and storage support basic website delivery, secure sessions, request protection, and remembering the consent choice itself.
These cannot be switched off from this manager because disabling them would break login/session behavior, form protection, or the ability to remember the privacy choice you save.
Cookie details
Session security: keeps secure server sessions working while browsing AWRA.
CSRF protection: helps verify form submissions and protect requests.
Consent record: stores the preference decision so the banner does not keep asking after a choice is saved.
Examples: Laravel session cookies, CSRF tokens, and the AWRA consent preference record.
Duration: session security can expire with the browser/session; saved consent can last longer so the same browser remembers the choice.
Functional Cookies
Functional Cookies
Functional storage improves the public website experience by remembering interface choices, helper states, dismissed notices, and short-lived interaction preferences.
Turning this off does not stop secure required cookies or analytics. It only limits optional convenience memory.
If disabled, AWRA may show some helper prompts again or forget non-essential display choices. Core public pages, contact forms, and request-demo forms still work.
Cookie details
UI preferences: remembered display choices and helper states where available.
Dismissed notices: session-level or preference-level memory for notices the visitor has closed.
Frequency helpers: optional browser storage that prevents repeated prompts when allowed.
Examples: localStorage or sessionStorage values for dismissed banners, guide/helper states, and lightweight public-page preferences.
Effect when off: AWRA avoids optional convenience memory unless it is also allowed through marketing and engagement preferences.
Analytics Cookies
Analytics Cookies
Always Active
Analytics helps AWRA understand public page performance, traffic patterns, and content usefulness so we can improve the marketing website.
This category does not by itself enable demo popups, exit-intent prompts, or advertising pixels. Those are controlled by Marketing & engagement.
In this AWRA setup, Google Analytics and Google Tag Manager measurement are treated as mandatory website measurement and remain active.
Cookie details
Google Analytics / GTM: measures aggregate traffic and page activity.
Performance insight: helps identify which public pages, docs, and demo paths visitors use.
Operational signal: supports website quality decisions without enabling demo popups by itself.
Examples: Google measurement identifiers such as GA/GTM tags and related browser identifiers set by Google scripts.
Use: page views, source/referrer trends, public content performance, and product education page effectiveness.
Marketing & engagement
Marketing & engagement
Marketing and engagement storage supports demo prompts, exit-intent prompts, campaign attribution, and future advertising pixels.
When disabled, AWRA will not auto-open demo or exit-intent popups. CTA buttons can still open a form because that is a direct visitor action.
When enabled, AWRA can remember that a visitor already saw, dismissed, or submitted a demo prompt so the same popup is not repeated aggressively.
Cookie details
Demo prompt memory: tracks whether an auto prompt or exit prompt was recently dismissed.
Demo submission memory: avoids asking again after a visitor submits a demo request.
Campaign context: keeps source page, referrer, and UTM context available for demo requests.
Examples: popup frequency caps, demo-submitted flags, engagement source fields, and UTM/referrer context.
Effect when off: auto demo prompts and exit-intent prompts stay blocked; normal navigation and manually clicked CTA buttons still work.