schema

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2023 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidPermission = errors.New("invalid permission")
	ErrInvalidSchema     = errors.New("invalid schema")
	ErrUnusedPermission  = errors.New("unused permission")
)
View Source
var ErrInvalidModel = errors.New("invalid model string")

Functions

func NewSchemaValidator

func NewSchemaValidator() *validator.Validate

Types

type AttributeSchema

type AttributeSchema struct {
	Name        string   `hcl:"name,label" mod:"trim,snake" validate:"required,validName"`
	Permissions []string `hcl:"permissions" mod:"dive,trim,snake" validate:"required,unique,dive,required"`
}

type GlobalSchema

type GlobalSchema struct {
	Permissions []string          `hcl:"permissions" mod:"dive,trim,snake" validate:"unique,dive,required"`
	Roles       []RoleSchema      `hcl:"role,block" mod:"dive" validate:"unique=Name,dive,required"`
	Attributes  []AttributeSchema `hcl:"attribute,block" mod:"dive" validate:"unique=Name,dive,required"`
}

func (*GlobalSchema) Validate

func (global *GlobalSchema) Validate() error

type Model

type Model struct {
	Path string `validate:"required,validQualPath"`
	Name string `validate:"required,validName,validQualName"`
}

func (*Model) MarshalText

func (m *Model) MarshalText() ([]byte, error)

encoding.TextMarshaller.

func (*Model) String

func (m *Model) String() string

func (*Model) Tuple

func (m *Model) Tuple() (string, string)

func (*Model) UnmarshalText

func (m *Model) UnmarshalText(text []byte) error

encoding.TextUnmarshaller.

func (*Model) Validate

func (m *Model) Validate() error

type PermissionSource

type PermissionSource struct {
	Type string // role, attribute
	Name string
}

func GetAttributeSources

func GetAttributeSources(permission string, attributes []AttributeSchema) []PermissionSource

func GetPermissionSources

func GetPermissionSources(permission string, attributes []AttributeSchema, roles []RoleSchema) []PermissionSource

func GetRoleSources

func GetRoleSources(permission string, roles []RoleSchema) []PermissionSource

type ResourceSchema

type ResourceSchema struct {
	Name  string `hcl:"name,label" mod:"trim,snake" validate:"required,validName,notReserved"`
	Model Model  `hcl:"model" mod:"trim" validate:"required,dive"`

	Permissions []string `hcl:"permissions" mod:"dive,trim,snake" validate:"unique,dive,required"`

	Roles      []RoleSchema      `hcl:"role,block" mod:"dive" validate:"unique=Name,dive,required"`
	Attributes []AttributeSchema `hcl:"attribute,block" mod:"dive" validate:"unique=Name,dive,required"`
}

func (ResourceSchema) GetAttributeSources

func (resource ResourceSchema) GetAttributeSources(permission string) []PermissionSource

func (ResourceSchema) GetPermissionSources

func (resource ResourceSchema) GetPermissionSources(permission string) []PermissionSource

GetPermissionSources returns all sources of a permission.

func (ResourceSchema) GetRoleSources

func (resource ResourceSchema) GetRoleSources(permission string) []PermissionSource

func (*ResourceSchema) Validate

func (resource *ResourceSchema) Validate() error

type RoleSchema

type RoleSchema struct {
	Name        string   `hcl:"name,label" mod:"trim,snake" validate:"required,validName"`
	Permissions []string `hcl:"permissions" mod:"dive,trim,snake" validate:"required,dive,required"`
}

type Schema

type Schema struct {
	Actor     Model            `hcl:"actor,optional" validate:"required"`
	Resources []ResourceSchema `hcl:"resource,block" mod:"dive" validate:"required,unique=Model,unique=Name,dive"`
	Global    GlobalSchema     `hcl:"global,block" validate:"required,dive"`
}

func LoadSchema

func LoadSchema(resourceCfgGlob string) (*Schema, error)

func LoadSchemaFile

func LoadSchemaFile(path string) (*Schema, error)

func ReadSchemaFile

func ReadSchemaFile(data []byte) (*Schema, error)

func (*Schema) Validate

func (s *Schema) Validate() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL