Help us shape the future of Go! Take the 2026 Go Developer Survey

cli

command module
v0.1.0-beta1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2023 License: Apache-2.0 Imports: 1 Imported by: 0

README

OpenFGA CLI

A cross-platform CLI to interact with an OpenFGA server

Go Reference Release License FOSSA Status Discord Server Twitter

Table of Contents

About

OpenFGA is an open source Fine-Grained Authorization solution inspired by Google's Zanzibar paper. It was created by the FGA team at Auth0 based on Auth0 Fine-Grained Authorization (FGA), available under a permissive license (Apache-2) and welcomes community contributions.

OpenFGA is designed to make it easy for application builders to model their permission layer, and to add and integrate fine-grained authorization into their applications. OpenFGA’s design is optimized for reliability and low latency at a high scale.

Resources

Installation

:TODO:

Building from Source

Make sure you have Go 1.20 or later installed. See the Go downloads page.

  1. Clone the repo to a local directory, and navigate to that directory:

    git clone https://github.com/openfga/cli.git && cd cli
    
  2. Then use the build command:

    go build -o ./fga main.go
    

    or if you have make installed, just run:

    make build
    
  3. Run the OpenFGA CLI with:

    ./fga 
    

Usage

Configuration

For any command that interacts with an OpenFGA server, these configuration values can be passed (where applicable)

Name Flag CLI
Server Url --server-url FGA_SERVER_URL
Shared Secret --api-token FGA_API_TOKEN
Client ID --client-id FGA_CLIENT_ID
Client Secret --client-secret FGA_CLIENT_SECRET
Token Issuer --api-token-issuer FGA_API_TOKEN_ISSUER
Token Audience --api-audience FGA_API_AUDIENCE
Store ID --store-id FGA_STORE_ID
Authorization Model ID --model-id FGA_MODEL_ID
Commands
Stores
Description command parameters example
Create a Store create --name fga store create --name="FGA Demo Store"
List Stores list fga store list
Get a Store get --store-id fga store get --store-id=01H0H015178Y2V4CX10C2KGHF4
Delete a Store delete --store-id fga store delete --store-id=01H0H015178Y2V4CX10C2KGHF4
Create Store
Command

fga store create

Parameters
  • --name: Specifies the name of the store to be created
Example

fga store create --name "FGA Demo Store"

JSON Response
{
    "id": "01H0H015178Y2V4CX10C2KGHF4",
    "name": "FGA Demo Store",
    "created_at": "2023-05-19T16:10:07.637585677Z",
    "updated_at": "2023-05-19T16:10:07.637585677Z"
}
List Stores
Command

fga store list

Parameters
  • --max-pages: Max number of pages to retrieve (default: 20)
Example

fga store list

JSON Response
{
  "stores": [{
    "id": "..",
    "name": "..",
    "created_at": "",
    "updated_at": "",
    "deleted_at": ""
  }, { .. }]
}
Get Store
Command

fga store get

Parameters
  • --store-id: Specifies the store id to get
Example

fga store get --store-id=01H0H015178Y2V4CX10C2KGHF4

JSON Response
{
    "id": "01H0H015178Y2V4CX10C2KGHF4",
    "name": "FGA Demo Store",
    "created_at": "2023-05-19T16:10:07.637585677Z",
    "updated_at": "2023-05-19T16:10:07.637585677Z"
}
Delete Store
Command

fga store delete

Parameters
  • --store-id: Specifies the store id to delete
Example

fga store delete --store-id=01H0H015178Y2V4CX10C2KGHF4

JSON Response
{}
Authorization Models
  • model
Description command parameters example
Read Authorization Models list --store-id fga model list --store-id=01H0H015178Y2V4CX10C2KGHF4
Write Authorization Model write --store-id, --file fga model write --store-id=01H0H015178Y2V4CX10C2KGHF4 --file=model.json
Read a Single Authorization Model get --store-id, --model-id fga model get --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1
Read Authorization Models
Command

fga model list

Parameters
  • --store-id: Specifies the store id
  • --max-pages: Max number of pages to retrieve (default: 20)
Example

fga model list --store-id=01H0H015178Y2V4CX10C2KGHF4

JSON Response
[{
    "schema_version": "1.1",
    "id": "01GXSA8YR785C4FYS3C0RTG7B1",
    "type_definitions": [
      {"type": "user"},
      // { ... }
    ],
},
// { ... }
]
Write Authorization Model
Command

fga model write

Parameters
  • --store-id: Specifies the store id
  • --file: Specifies the file containing the model in JSON format
Example
  • fga model write --store-id=01H0H015178Y2V4CX10C2KGHF4 --file=model.json
  • fga model write --store-id=01H0H015178Y2V4CX10C2KGHF4 '{"type_definitions": [ { "type": "user" }, { "type": "document", "relations": { "can_view": { "this": {} } }, "metadata": { "relations": { "can_view": { "directly_related_user_types": [ { "type": "user" } ] }}}} ], "schema_version": "1.1"}'
JSON Response
{
  "authorization_model_id":"01GXSA8YR785C4FYS3C0RTG7B1"
}
Read a Single Authorization Model
Command

fga model get

Parameters
  • --store-id: Specifies the store id
  • --model-id: Specifies the model id
Example

fga model get --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1

JSON Response
{
    "schema_version": "1.1",
    "id": "01GXSA8YR785C4FYS3C0RTG7B1",
    "type_definitions": [
      {"type": "user"},
      // { ... }
    ],
}
Read the Latest Authorization Model

If model-id is not specified when using the get command, the latest authorization model will be returned.

Command

fga model get

Parameters
  • --store-id: Specifies the store id
Example

fga model get --store-id=01H0H015178Y2V4CX10C2KGHF4

JSON Response
{
    "schema_version": "1.1",
    "id": "01GXSA8YR785C4FYS3C0RTG7B1",
    "type_definitions": [
      {"type": "user"},
      // { ... }
    ],
}
Validate an Authorization Model
Command

fga model validate

Parameters
Example

fga model validate '{"schema_version":"1.1,"type_definitions":[{"type":"user"}]}'

JSON Response
  • Valid model with an ID
{"id":"01GPGWB8R33HWXS3KK6YG4ETGH","created_at":"2023-01-11T16:59:22Z","is_valid":true}
  • Valid model without an ID
{"is_valid":true}
  • Invalid model with an ID
{"id":"01GPGTVEH5NYTQ19RYFQKE0Q4Z","created_at":"2023-01-11T16:33:15Z","is_valid":false,"error":"invalid schema version"}
  • Invalid model without an ID
{"is_valid":false,"error":"the relation type 'employee' on 'member' in object type 'group' is not valid"}
Relationship Tuples
  • tuple
Description command parameters example
Write Relationship Tuples write --store-id, --model-id fga tuple write --store-id=01H0H015178Y2V4CX10C2KGHF4 '{"schema_version":"1.1","type_definitions":[...]}'
Delete Relationship Tuples delete --store-id, --model-id fga tuple delete --store-id=01H0H015178Y2V4CX10C2KGHF4
Read Relationship Tuples read --store-id, --model-id fga tuple read --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1
Read Relationship Tuple Changes (Watch) changes --store-id, --model-id fga tuple changes --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1
Import Relationship Tuples import --store-id, --model-id, --file fga tuple import --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1 --file=tuples.json
Write Relationship Tuples
Command

fga tuple write

Documentation

Overview

Copyright © 2023 OpenFGA

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Directories

Path Synopsis
cmd
internal
build
Package build provides build information that is linked into the application.
Package build provides build information that is linked into the application.
lib
fga
Package mock_client is a generated GoMock package.
Package mock_client is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL