Add migrations
At this point, you could add the Resource Types, Actions and Policies by hand, but we'll do it migrations for two reasons:
It's easier for this tutorial, and
For real apps, that change over time, this is best practice anyway.
Add these two files to a folder called 'cerberusmigrations' under 'backend/go':
Don't worry too much about the details of these files for now. Suffice it to say they act like normal database migrations, creating or deleting data for each migration version.
It's accomplished with a DSL (domain specific language) detailed in Migrations
We always need four things:
Resource Types
Actions
Policies
Actions linked to Policies
The precise details of these four elements will depend on your domain and how you want to set up permissions in your product.
Add the following line to the top of the 'go.mod' file:
module cerberus-examples
go 1.18
replace github.com/golang-migrate/migrate/v4 => github.com/a11n-io/migrate/v4 v4.15.13
require (
github.com/a11n-io/go-cerberus v0.3.39
.
.
.
Next, add the following imports to 'cmd/api/api.go':
// Add imports here
cerberus "github.com/a11n-io/go-cerberus"
cerberusmigrate "github.com/golang-migrate/migrate/v4/database/cerberus"
And the following code to the main function in the same file:
// Add cerberus client and migration code here
cerberusClient := cerberus.NewClient(_env.CERBERUS_HOST, _env.CERBERUS_API_KEY, _env.CERBERUS_API_SECRET)
cdriver, err := cerberusmigrate.WithInstance(cerberusClient, &cerberusmigrate.Config{})
if err != nil {
log.Fatalf("could not get cerberus driver: %v", err.Error())
}
cm, err := migrate.NewWithDatabaseInstance(
"file://cerberusmigrations", "cerberus", cdriver)
if err != nil {
log.Fatalf("could not get cerberus migrate: %v", err.Error())
} else {
if err := cm.Up(); err != nil {
log.Println(err)
}
log.Println("cerberus migration done")
}
Run the app again:
docker-compose build
docker-compose up
The console should report that the migration has run, and on the dashboard you should see one migration, and all the created Resource Types, Actions and Policies:



Last updated