Openfga Versions Save

A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar

v1.3.10

5 months ago

Changed

  • Bumped up to Go 1.21.5 (#1219)

Fixed

  • Reorder protobuf fields for persisted Assertions (#1217)

    Assertions written on or after v1.3.8 should be re-written to resolve some binary encoding issues that were introduced.

  • Handle floating point conversion errors in conditions (#1200)

v1.3.9

5 months ago

Fixed

  • Avoid panic when processing a nil set of writes (#1208) - thanks @stgraber!

  • Decoding of null conditions in SQL storage implementations (#1212)

v1.3.8

5 months ago

[BREAKING] this release introduced protobuf API changes to the gRPC API to accommodate changes for the up and coming Conditional Relationship Tuples feature. No changes to the OpenAPI specification for the HTTP API have changed. gRPC clients that are referencing the old protobuf definitions are not compatible with this release and future releases >= v1.3.8. To upgrade to this release please update your existing OpenFGA gRPC clients to the latest protobuf API definitions. Failing to do so can lead to message and field level incompatibilities with existing clients.

Added

  • Experimental support for ABAC Conditional Relationships.

    To enable experimental support for ABAC Conditional Relationships you can pass the enable-conditions experimental flag. For example, openfga run --experimentals=enable-conditions. The upcoming v1.4.0 release will introduce official support for this new feature. For more information please see our official blog post. The v1.4.0 release will have more official documentation on openfga.dev.

    ⚠️ If you enable experimental support for ABAC and introduce models and/or relationship tuples into the system and then choose to rollback to a prior release, then you may experience unintended side-effects. Care should be taken!

    Read on for more information.

    If you introduce a model with a condition defined in a relation's type restriction(s) and then rollback to a prior OpenFGA release, then the model will be treated as though the conditioned type restriction did not exist.

    model
      schema 1.1
    
    type user
    
    type document
      relations
        define viewer: [user with somecondition]
    
    condition somecondition(x: int) {
      x < 100
    }
    

    and then you rollback to v1.3.7 or earlier, then the model above will be treated equivalently to

    model
      schema 1.1
    
    type user
    
    type document
      relations
        define viewer: [user]
    

    Likewise, if you write a relationship tuple with a condition and then rollback to a prior release, then the tuple will be treated as an unconditioned tuple.

    - document:1#viewer@user:jon, {condition: "somecondition"}
    

    will be treated equivalently to document:1#viewer@user:jon in v1.3.7 or earlier. That is, Check(document:1#viewer@user:jon) would return {allowed: true} even though at the tuple was introduced it was conditioned.

  • Minimum datastore schema revision check in the server's health check (#1166)

    Each OpenFGA release from here forward will explicitly reference a minimum datastore schema version that is required to run that specific release of OpenFGA. If OpenFGA operators have not migrated up to that revision then the server's health checks will fail.

  • Username/password configuration overrides for the openfga migrate entrypoint (#1133). Thanks for the contribution @martin31821!

    Similar to the server's main entrypoint openfga run, you can now override the datastore username and password with environment variables. when running the openfga migrate utility.

  • Healthcheck definitions in Dockerfile (#1134). Thanks @Siddhant-K-code!

Changed

  • Database iterators yielded by the RelationshipTupleReader storage interface now accept a context parameter which allows iteration to be promptly terminated (#1055)

    We have noticed improvements in query performance by adding this because once a resolution path has been found we more quickly cancel any further evaluation by terminating the iterators promptly.

  • Improved tuple validation peformance with precomputation of TTUs (#1171)

  • Refactored the commands in the pkg/server/commands package to uniformly use the Options builder pattern (#1142). Thanks for the contribution @ilaleksin!

  • Upgraded to Go 1.21.4 (#1143). Thanks @tranngoclam!

Fixed

  • If two requests were made with the same request body and contextual tuples but the order of the contextual tuples differed, then the cache key that is produced is now the same.(#1187)

  • Use NoOp TracerProvider if tracing is disabled (#1139 and #1196)

v1.3.7

6 months ago

Security

  • Bumped up the grpc-health-probe dependency to the latest release which fixed some vulnerabilities.

v1.3.6

6 months ago

Added

  • Provenance manifests generation (openfga.intoto.jsonl) for verification of release artifacts with SLSA attestations.

Changed

  • Removed the experimental flag check-query-cache.

    If you wish to enable the Check query cache you no longer need the experimental flag.

v1.4.0-rc1

6 months ago

The v1.4.0-rc1 release is an experimental release candidate that introduces new support for ABAC Conditions in OpenFGA.

For more information, take a look at our blog post Conditional Relationship Tuples for OpenFGA. This blog post talks more about the feature and how to make use of it.

v1.3.5

7 months ago

Added

  • Export metrics from MySQL and Postgres (#1023). Thanks @matoous!

    To export datastore metrics, set OPENFGA_METRICS_ENABLED=true and OPENFGA_DATASTORE_METRICS_ENABLED=true.

Fixed

  • Return all results when OPENFGA_LIST_OBJECTS_MAX_RESULTS=0 (#1067)
  • Promptly return if max results are met before deadline in ListObjects (#1064)
  • Fix sort order on ReadChanges (#1079)

Changed

  • Write Authorization Models in a single database row (#1030)

    :warning: In order to avoid downtime, we recommend upgrading to at least v1.3.3 before upgrading to v1.3.5.

    This is the second of a series of releases that will progressively introduce changes via code and database migrations that will allow authorization models to be stored in a single database row.

    See here for more details.

v1.3.4

7 months ago

Fixed

  • Incorrect string in model validation error message (#1057)
  • Incorrect results can be returned by Check API when passing in contextual tuples and the check-query-cache experimental flag is turned on (#1059)

Changed

  • Bumped up to Go 1.21.3 (#1060)

Security

v1.3.3

7 months ago

Added

  • Configurable size limit for Authorization Models (#1032)

    We've introduced a new size limit for authorization models, providing a consistent behavior across datastores, which defaults to 256KB. This can be configured by using the --max-authorization-model-size-in-bytes flag.

Fixed

  • Reduce use of GOB in encoded cache key (#1029)

Changed

  • Persist Authorization Models serialized protobuf in the database (#1028)

    In the next series of releases will progressively introduce changes via code and database migrations that will allow authorization models to be stored in a single database row.

    See here for more details.

v1.3.2

8 months ago

Added

  • Support TLS for OTLP trace endpoint (#885) - thanks @matoous
  • Configurable limits to database reads per ListObjects query (#967)
  • Datastore query count labels to traces and query latency histogram in ListObjects (#959)
  • Github workflow to check markdown links (#1016) - thanks @sanketrai1

Fixed

  • Change response code to internal error for concurrency conflicts (#1011)

Changed

  • Use slices and maps packages from go1.21 (#969) - thanks @tranngoclam
  • Moved request validations to RPC handlers so library integrations benefit (#975, #998)
  • Refactored internal usages of ConnectedObjects to ReverseExpand (#968)
  • Expose validation middleware (#1005)
  • Upgrade grpc validator middleware to the latest v2 package (#1019) - thanks @tranngoclam

Security

  • Patches CVE-2023-43645 - see the CVE for more details

    [BREAKING] If your model contained cycles or a relation definition that has the relation itself in its evaluation path, then Checks and queries that require evaluation will no longer be evaluated on v1.3.2+ and will return errors instead. You will need to update your models to remove the cycles.