This repository contains Type-Safe Code Generation tools for AuthZed.
Authzed is a powerful authorization engine that allows you to define and manage your authorization policies. This code generation tool helps you generate type-safe code for your AuthZed schemas, making it easier to work with your authorization policies in a type-safe manner.
TLDR; zed
schema => go
code generation.
// ... other definitions
definition menusvc/order {
relation creator: menusvc/user | menusvc/customer
relation company: menusvc/company
permission write = creator + creator->manage + company->manage
}
// ... other definitions
// order-flow.go
// usage generated stubs example
// ...
order := menusvc.Order("order-id")
user := menusvc.User("user-id")
order.CreateCreatorRelations(ctx, menusvc.OrderCreatorObjects{
User: []menusvc.User{user},
// Customer: []menusvc.Customer{},
})
order.
CheckWrite(ctx, acl.CheckOrderWriteInputs{
User: []menusvc.User{user},
// Company: []menusvc.Company{},
})
// ...
// order.gen.go
// Code generated by authzed-codegen. DO NOT EDIT.
package menusvc
const TypeOrder authz.Type = "menusvc/order"
type RelationOrder authz.Relation
type PermissionOrder authz.Permission
// Many payload types like `OrderCreatorObjects`, `OrderCreatorRelation`, etc.
// ...
type Order authz.ID
const OrderCreator RelationOrder = "creator"
const OrderCompany RelationOrder = "company"
const OrderWrite PermissionOrder = "write"
// Many other utility methods like `Order.CreateCreatorRelations`, `Order.CheckWrite`, etc.
// ...
To install the dependencies, run:
go install -v github.com/danhtran94/authzed-codegen/cmd/authzed-codegen@latest
To generate code, run:
authzed-codegen --output example/authzed example/schema.zed
- Create relationships and permissions stubs.
- Read relationships.
- Lookup permissions and relationships.
- Generate code for multiple languages (Go,
TypeScript, etc.). - SpiceDB engine client.
- Support all schema features.
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.