Skip to content
What's new

Rent v0.8.3

Rent v0.8.3 lets an eligible helper work with private resources while representing their owner, without granting the same access to that helper acting alone.

Delegated-only helper access

Combine an existing owner rule and live helper eligibility with the new delegated_actor() condition:

reader = owner or (eligible_helper and delegated_actor())
read = reader

Use delegation = "intersect". Rent checks the executing helper and the represented subject independently. The helper can use its delegated branch. The represented subject must qualify through ownership or another rule you explicitly allow. A helper representing the wrong owner fails that owner's check. A helper acting alone does not qualify through the delegated branch.

The condition follows normal named and related permission rules, protected reads and writes, field guards, caches and explanations. It adds no stored grant or database lookup. Schemas using it reject inherit delegation.

Bind the pair through the existing Viewer::on_behalf_of API after authenticating both identities and validating delegation. Applications remain responsible for credential expiry and restrictions on who may represent whom. Generic request intersections do not establish delegation and do not activate the condition.

The private delegation lesson provides a complete example. The permission reference describes the exact evaluation and inspection behavior.

Upgrade

Use v0.8.3 for the CLI and every Rent crate, regenerate configured clients and commit the application's lockfile. Opt into the new condition by narrowing the helper branch in your schema. Existing permission rules retain their behavior. The condition itself requires no database migration. Review the application's migration diff for any other schema changes.

Rust code exhaustively matching permission enums must handle PermissionExpr::DelegatedActor, PermissionExpressionKind::DelegatedActor and UnresolvedSubjects::Delegation. Reverse who_can inspection evaluates stored subjects independently and reports delegated populations as unresolved rather than treating them as standalone grants.