Unlimited Design & Technology

Security and Privacy

Check authorization on every business object

An authenticated customer should not automatically see every invoice or attachment. Define access at the business object level, then ask for evidence across screens, exports, and background work before accepting the feature.

UDT InsightsNov 17, 2023
A colleague checks a lock between separate records and an owner badge. A colleague reviews a clipboard.

A customer portal can look correct while its access rules remain incomplete. The useful question is not just whether someone can sign in. It is whether this person can perform this action on this particular invoice, order, or document. Make that question part of acceptance criteria before development begins.

Separate identity from permission

Authentication verifies identity. Authorization determines whether a requested action is allowed. OWASP treats these as distinct decisions and recommends permission validation on every request.[1] A successful login therefore does not establish permission to read every record.

Start with a compact table of actors, objects, and actions. Include customer contacts, delegates, finance staff, and service accounts. Distinguish reading an invoice from changing its payment destination. Record ownership, organization membership, and any approved sharing relationship as separate conditions.

Put the decision beside the data

OWASP advises server-side access checks and warns against reliance on client-side controls.[1] Ask the team to show where the server decides access before it returns data or accepts a change. Include attachments, search results, totals, and downloadable exports in that review.

Recommend one consistent policy interface rather than scattered role checks. This need not mean one expensive remote call for every row. The design can constrain data queries and validate actions together. Performance improvements must preserve the same access decision, including when permissions change.

Hypothetical example: a disputed invoice

In a hypothetical distributor portal, a purchasing contact can view invoices for one branch. A regional manager can view several branches but cannot edit bank details. The product owner writes these as separate permissions, rather than granting both users a broad customer role.

A test then covers an invoice attachment, a consolidated export, and a dispute submitted after branch access is removed. The expected refusal includes no invoice details. This example illustrates acceptance evidence, not a claim that any deployed portal is secure.

Evidence to request before sign-off

Use synthetic records and approved test accounts. Require both allowed and denied outcomes, with an explanation of the business rule behind each result.

  • List the ownership or sharing condition for each object and action.
  • Test unauthorized reads and changes through every supported interface.
  • Check exports and attachments against the same object permissions.
  • Repeat tests after membership removal and delegated access expiry.

Accept the maintenance cost

Fine-grained rules create more policy decisions and test cases than a single administrator flag. Keep a named business owner for exceptions. Revisit the table when the workflow changes, not only when a new screen appears. Accept a feature only when its access evidence covers the underlying objects, not merely its visible navigation.

References

Discuss your next project

Talk with UDT about your needs and the next practical step.

Contact UDT
Zalo