Teams whose permission model is object-level and whose agents keep finding the gap.
How much granularity you actually need, and where the extra granularity should be evaluated.
The control gap
Fine-grained authorization normally means moving from role-level to object-level: this user may edit this document. That is a real improvement and it is where most of the tooling stops. Agents expose the next gap. Two calls can involve the same agent, the same tool, and the same object and still deserve different answers, because one refunds four dollars and the other refunds four thousand. Object-level permission cannot see the difference.
What good looks like
Object-level permissions stay in whatever engine models them well, and argument-level conditions are evaluated at the tool boundary where the values exist.
- Keep the object model in a system built for it, whether that is roles, relationships, or a policy store.
- Evaluate the call's own attributes at the boundary: amounts, targets, counts, environment, time.
- Express thresholds as policy rather than as code inside a tool, so they can be reviewed and versioned.
- Give the boundary a third outcome, because the calls above a threshold usually need a person rather than a refusal.
A production workflow
- List the actions where the same tool and object can be safe or dangerous depending on the arguments.
- Write the threshold rules and run them in shadow mode against recorded calls.
- Measure how often each rule fires and tune before enforcing.
- Enforce, and keep the argument values with each decision so the rule can be defended later.
Evidence to require
- The argument values evaluated for each decision, not only the tool and object.
- The rule and version that matched, with its threshold at that time.
- Calls that passed object-level permission and were stopped by an argument rule.
- Approval requests generated by threshold rules, and their outcomes.
Buyer checklist
- Which of your tools can do something trivial and something irreversible through the same call?
- Where would a threshold live today, and could a reviewer find it?
- Are argument values retained with decisions, or discarded after execution?
- How is a threshold changed, and who approves that change?
Practical answers
Common implementation questions
Is this not just ABAC?
It is attribute-based, with one difference that matters operationally. Classic ABAC pulls attributes about subjects and objects from external sources; here the decisive attributes arrive in the request, so there is nothing to synchronise and nothing to go stale.
Does this replace a relationship engine?
No. Relationships answer whether this subject may touch this object at all, which is a question worth answering well. Argument rules answer whether this particular call is acceptable.
How granular is too granular?
When nobody can explain the current rule set without reading it. Granularity has a review cost, so add a rule when there is an action you would genuinely stop, not because the system supports it.