Files
grafana/pkg/services/authz/zanzana/schema/transform.go
T
Alexander Zobnin 87c4f2448c Zanzana: Use modular schema (#92001)
* Zanzana: Use modular schema

* Fix tests

* Add module transform tests
2024-08-19 11:10:51 +02:00

59 lines
1.6 KiB
Go

package schema
import (
_ "embed"
"fmt"
openfgav1 "github.com/openfga/api/proto/openfga/v1"
language "github.com/openfga/language/pkg/go/transformer"
"google.golang.org/protobuf/encoding/protojson"
)
func TransformModulesToModel(modules []language.ModuleFile) (*openfgav1.AuthorizationModel, error) {
parsedAuthModel, err := language.TransformModuleFilesToModel(modules, "1.2")
if err != nil {
return nil, fmt.Errorf("failed to transform dsl to model: %w", err)
}
return parsedAuthModel, nil
}
func TransformDSLToModel(dsl string) (*openfgav1.AuthorizationModel, error) {
parsedAuthModel, err := language.TransformDSLToProto(dsl)
if err != nil {
return nil, fmt.Errorf("failed to transform dsl to model: %w", err)
}
return parsedAuthModel, nil
}
func TransformToDSL(model *openfgav1.AuthorizationModel, opts ...language.TransformOption) (string, error) {
return language.TransformJSONProtoToDSL(model, opts...)
}
// EqualModels compares two authorization models.
// Id is not comparing since model loaded from disk doesn't contain Id.
func EqualModels(a, b *openfgav1.AuthorizationModel) bool {
aCopy := openfgav1.AuthorizationModel{
SchemaVersion: a.SchemaVersion,
TypeDefinitions: a.TypeDefinitions,
Conditions: a.Conditions,
}
aJSONBytes, err := protojson.Marshal(&aCopy)
if err != nil {
return false
}
bCopy := openfgav1.AuthorizationModel{
SchemaVersion: b.SchemaVersion,
TypeDefinitions: b.TypeDefinitions,
Conditions: b.Conditions,
}
bJSONBytes, err := protojson.Marshal(&bCopy)
if err != nil {
return false
}
return string(aJSONBytes) == string(bJSONBytes)
}