[ 
https://issues.apache.org/jira/browse/CAMEL-25184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18121519#comment-18121519
 ] 

Andrea Cosentino commented on CAMEL-25184:
------------------------------------------

PR opened: https://github.com/apache/camel/pull/27195

Adds the readTuples, readChanges and expand operations, with 
pageSize/continuationToken/startTime for paging and the 
CamelOpenFgaContinuationToken header. readTuples emits the same key shape 
writeTuples/deleteTuples accept, so a read-then-revoke route needs no 
transformation. The Read API filter rule was established against a live OpenFGA 
1.21.0 (user-only, relation-only and type-only-object filters are rejected 
server-side) and is now validated up front instead of surfacing as an opaque 
HTTP 400.

_Claude Code on behalf of oscerd_

> camel-openfga: add the expand, readTuples and readChanges operations
> --------------------------------------------------------------------
>
>                 Key: CAMEL-25184
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25184
>             Project: Camel
>          Issue Type: Improvement
>            Reporter: Andrea Cosentino
>            Assignee: Andrea Cosentino
>            Priority: Minor
>              Labels: openfga
>             Fix For: 4.23.0
>
>
> Follow-up to CAMEL-25028. {{camel-openfga}} shipped with seven operations - 
> {{check}}, {{batchCheck}},
> {{listObjects}}, {{listRelations}}, {{listUsers}}, {{writeTuples}} and 
> {{deleteTuples}} - chosen to cover the
> authorization decision, the two filtering queries and grant/revoke. Several 
> useful parts of the OpenFGA API are not
> exposed yet.
> h2. Operations to add
> * *{{expand}}* - expands a relation into its userset tree. This is the 
> operation you reach for when a check answered
>   something surprising and you need to see why, so it is mostly an 
> introspection and debugging aid.
> * *{{readTuples}}* - queries the stored relationship tuples, optionally 
> filtered by a partial tuple key. Useful for
>   a route that has to report or reconcile what access exists, as opposed to 
> asking whether one subject has it.
> * *{{readChanges}}* - reads the store's change log from a continuation token. 
> This is the natural building block for
>   keeping an external cache or projection in step with the graph, and it is 
> the one operation here that a consumer
>   could eventually be built on.
> h2. Store and authorization-model management
> {{createStore}}, {{getStore}}, {{deleteStore}}, {{listStores}}, 
> {{writeAuthorizationModel}},
> {{readAuthorizationModel(s)}}, {{readLatestAuthorizationModel}}.
> These deserve their own discussion rather than being added by reflex. They 
> are administrative rather than
> integration operations, and a component that can delete the store it 
> authorizes against is a different security
> proposition from one that can only ask it questions. If they are added, they 
> should probably be off unless
> explicitly configured, and the documentation should say what a route holding 
> those credentials can do.
> h2. Notes
> All of these already exist on {{OpenFgaClient}}, so the work is the 
> Camel-side mapping: the body shape each
> operation returns, pagination for {{readTuples}} and {{readChanges}} (both 
> are page-based with a continuation
> token), and the endpoint options each needs.
> The existing operations set a couple of conventions worth keeping. A query 
> replaces the body with a
> {{List<String>}} of identifiers rather than SDK objects, and {{listUsers}} 
> flattens OpenFGA's three subject shapes
> ({{object}}, {{userset}}, {{wildcard}}) into {{type:id}}, 
> {{type:id#relation}} and {{type:*}}. {{expand}} returns a
> tree, so it is the first operation that will not fit that convention and 
> needs a deliberate decision.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to