package permissions import ( "database/sql/driver" "encoding/json" "errors" "fmt" "github.com/oklog/ulid/v2" ) type Policy struct { ID ulid.ULID `gorm:"primaryKey;type:bytea"` Name string `gorm:"not null"` RoleID ulid.ULID `gorm:"type:bytea"` //Fremdschlüssel Scopes Scopes `gorm:"type:jsonb;not null"` // JSONB-Spalte } // Scopes type to handle JSON marshalling type Scopes map[string]Permission // Scan scan value into Jsonb, implements sql.Scanner interface func (j *Scopes) Scan(value interface{}) error { bytes, ok := value.([]byte) if !ok { return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) } var scopes map[string]Permission if err := json.Unmarshal(bytes, &scopes); err != nil { return err } *j = scopes return nil } // Value return json value, implement driver.Valuer interface func (j Scopes) Value() (driver.Value, error) { return json.Marshal(j) }