- From: Melvin Carvalho <melvincarvalho@gmail.com>
- Date: Tue, 8 Jul 2025 13:34:20 +0200
- To: April Daly <adaly@labobjects.com>
- Cc: public-solid <public-solid@w3.org>
- Message-ID: <CAKaEYh+hNnQAgLGcAaoT9=BwwCVy_FkUh1FrtBb8iPtmstHU-g@mail.gmail.com>
út 8. 7. 2025 v 13:24 odesílatel April Daly <adaly@labobjects.com> napsal: > Hi, > > > > From a modeling perspective, wouldn’t this be considered a “Business > Rule”? (i.e., in this context, rule(s) that govern conditional access) > > > > I can’t think of many use cases, but I imagine over time there could be > many conditions applied, depending on usage/context, each requiring > different rules and supporting actions. > > > > If I’m granting access to medical information, I may want to grant access > to a medical group (organization), but only individuals with certain > credentials (memberships) and properties. > > > > For example, all doctors that are active members in medical group XYZ that > specialize in cardiology and are in good standing with the ABC medical > association can read my cardiogram. > > > > This is a contrived example but hopefully illustrates the potential > complexity for conditional access. > > > > The payment required feature complexity is increasing and demonstrates the > need for different rules depending on context (and a need to address > boundaries between public normative rules and implementation): > > > > Melvin wrote: > > > > 1. **Currency unit** — keep it server-wide (simplest) or add another > predicate for per-rule currency? > 2. **Headers** — are `Pay-Balance` / `Pay-Required` worth standardising > or should there be a problem JSON body alone carry the numbers? > 3. **Ledger location** — should the spec normatively reference a > `webledger.json` (or similar) so clients can fetch balances? > > Joshua Cornejo wrote: > > > > As an obligation, “payment” is one of many – you can think of a use case > where the data you are trying to access as a fragment of > document/play/musical composition, one obligation can be “pay me a > percentage” and another could be “attribution as co-author”. > > > > Also, Cloudflare’s solution is tightly coupled – the consumer pays on > their platform – I assume you can’t implement that in a pod. > > > > Finally, think about tracking mechanisms for obligation fulfilment vs > compliance/tracking on that fulfilment (e.g. payment happens pre-facto / > attribution happens post-facto). > > > > > > > > I think the proposal identifies an important need/gap that needs to be > addressed, but I’m not sure that the ACL model is the best fit for > conditional access rules given the potential for complexity and the need to > support (context specific) variations. > > > > Would a Business Rule ‘layer’ better serve this need (overall)? > Thanks Joshua & April, acl:paymentRequired is meant as a tiny shortcut for the very common “pre-pay X credits” case, nothing more. Think of a metered chat agent or a rate-limited API that charges per request. Anything richer (royalties, attribution, medical-credentials, post-facto duties) should live in a full policy layer (ODRL or similar) that ACL can simply reference. So: simple paywall ⇒ one decimal in ACL; complex conditional access ⇒ point to a policy object. Best, Melvin > > > Thank you. > > > > Kind regards, > > April > > > > > > *From:* Melvin Carvalho <melvincarvalho@gmail.com> > *Sent:* Tuesday, July 8, 2025 4:17 AM > *To:* public-solid <public-solid@w3.org> > *Subject:* Proposal: Adding acl:paymentRequired predicate for HTTP 402 > handling > > > > Hi All, > > Short version > ============= > > I propose we mint a single new predicate in the ACL namespace: > > acl:paymentRequired > > If an `Authorization` statement includes this triple, > a compliant server **MUST** deny access when the requester’s account > balance—in the server’s ledger for that realm—falls below the > literal. The denial is expressed as an *HTTP 402 Payment Required* > response that also tells the client where and how to top-up. > > Why? > ==== > > Many Solid agents run on usage-based quotas > (API tokens, Streaming Chat Interfaces, storage bytes, etc.). > Today servers have no *standard* way to: > > * signal “the request was good, but please pay a bit first”, **and** > * tell the client where to send that payment. > > Applications therefore cook up ad-hoc headers and status codes, > breaking interoperability. > > One predicate plus the already standard HTTP 402 closes that gap. > > Proposed vocabulary diff > ======================== > > > @prefix acl: [ > http://www.w3.org/ns/auth/acl#](http://www.w3.org/ns/auth/acl#) . > @prefix xsd: [ > http://www.w3.org/2001/XMLSchema#](http://www.w3.org/2001/XMLSchema#) . > > acl:paymentRequired > a rdf:Property ; > rdfs:label "payment required" ; > rdfs:comment "Minimum positive balance the agent must hold > before this Authorization is granted. > Decimal, same currency unit the server’s > ledger uses." ; > rdfs:domain acl:Authorization ; > rdfs:range xsd:decimal . > > > Example ACL > ----------- > > > @prefix acl: [ > http://www.w3.org/ns/auth/acl#](http://www.w3.org/ns/auth/acl#) . > @prefix foaf: [http://xmlns.com/foaf/0.1/](http://xmlns.com/foaf/0.1/) > <http://xmlns.com/foaf/0.1/%5d(http:/xmlns.com/foaf/0.1/)> . > > <#paid-read> > a acl:Authorization ; > acl:accessTo </data/> ; > acl:mode acl:Read ; > acl:agentClass foaf:Agent ; > acl:paymentRequired "0.0005"^^xsd:decimal . > > > > Server behaviour (normative) > ============================ > > * Evaluate the requester’s **current balance** (ledger details are > implementation-specific). > * If balance < required, respond: > > > > HTTP/1.1 402 Payment Required > Link: https://pay.example/topup ; rel="payment" > Pay-Balance: "-0.0001" > Pay-Required: "0.0005" > > > > * After the client tops up and retries, normal `2xx` processing > resumes. > > Open questions > ============== > > 1. **Currency unit** — keep it server-wide (simplest) or add another > predicate for per-rule currency? > 2. **Headers** — are `Pay-Balance` / `Pay-Required` worth standardising > or should there be a problem JSON body alone carry the numbers? > 3. **Ledger location** — should the spec normatively reference a > `webledger.json` (or similar) so clients can fetch balances? > > Implementor feedback is very welcome. > > Best, > Melvin >
Received on Tuesday, 8 July 2025 11:34:36 UTC