relationtuple

package
v0.13.0-alpha.0 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2024 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReadRouteBase  = "/relation-tuples"
	WriteRouteBase = "/admin/relation-tuples"
)

Variables

This section is empty.

Functions

func IsolationTest

func IsolationTest(t *testing.T, m0, m1 Manager)

func ManagerTest

func ManagerTest(t *testing.T, m Manager)

func MapAndWriteTuples

func MapAndWriteTuples(t *testing.T, m interface {
	MapperProvider
	ManagerProvider
}, tuples ...*ketoapi.RelationTuple)

MapAndWriteTuples is a test helper to write relationships to the database while mapping all strings to UUIDs.

func MappingManagerTest

func MappingManagerTest(t *testing.T, m MappingManager)

func NewHandler

func NewHandler(d handlerDeps) *handler

Types

type InternalRelationTuples

type InternalRelationTuples []*RelationTuple

type Manager

type Manager interface {
	GetRelationTuples(ctx context.Context, query *RelationQuery, options ...x.PaginationOptionSetter) ([]*RelationTuple, string, error)
	ExistsRelationTuples(ctx context.Context, query *RelationQuery) (bool, error)
	WriteRelationTuples(ctx context.Context, rs ...*RelationTuple) error
	DeleteRelationTuples(ctx context.Context, rs ...*RelationTuple) error
	DeleteAllRelationTuples(ctx context.Context, query *RelationQuery) error
	TransactRelationTuples(ctx context.Context, insert []*RelationTuple, delete []*RelationTuple) error
}

type ManagerProvider

type ManagerProvider interface {
	RelationTupleManager() Manager
}

type ManagerWrapper

type ManagerWrapper struct {
	Reg            ManagerProvider
	PageOpts       []x.PaginationOptionSetter
	RequestedPages []string
	// contains filtered or unexported fields
}

func NewManagerWrapper

func NewManagerWrapper(_ any, reg ManagerProvider, options ...x.PaginationOptionSetter) *ManagerWrapper

func (*ManagerWrapper) DeleteAllRelationTuples

func (t *ManagerWrapper) DeleteAllRelationTuples(ctx context.Context, query *RelationQuery) error

func (*ManagerWrapper) DeleteRelationTuples

func (t *ManagerWrapper) DeleteRelationTuples(ctx context.Context, rs ...*RelationTuple) error

func (*ManagerWrapper) ExistsRelationTuples

func (t *ManagerWrapper) ExistsRelationTuples(ctx context.Context, query *RelationQuery) (bool, error)

func (*ManagerWrapper) GetRelationTuples

func (t *ManagerWrapper) GetRelationTuples(ctx context.Context, query *RelationQuery, options ...x.PaginationOptionSetter) ([]*RelationTuple, string, error)

func (*ManagerWrapper) RelationTupleManager

func (t *ManagerWrapper) RelationTupleManager() Manager

func (*ManagerWrapper) TransactRelationTuples

func (t *ManagerWrapper) TransactRelationTuples(ctx context.Context, insert []*RelationTuple, delete []*RelationTuple) error

func (*ManagerWrapper) WriteRelationTuples

func (t *ManagerWrapper) WriteRelationTuples(ctx context.Context, rs ...*RelationTuple) error

type Mapper

type Mapper struct {
	D        mapperDependencies
	ReadOnly bool
}

func (*Mapper) FromQuery

func (m *Mapper) FromQuery(ctx context.Context, apiQuery *ketoapi.RelationQuery) (res *RelationQuery, err error)

func (*Mapper) FromSubjectSet

func (m *Mapper) FromSubjectSet(ctx context.Context, set *ketoapi.SubjectSet) (_ *SubjectSet, err error)

func (*Mapper) FromTuple

func (m *Mapper) FromTuple(ctx context.Context, ts ...*ketoapi.RelationTuple) (res []*RelationTuple, err error)

func (*Mapper) ToQuery

func (m *Mapper) ToQuery(ctx context.Context, q *RelationQuery) (res *ketoapi.RelationQuery, err error)

func (*Mapper) ToTree

func (m *Mapper) ToTree(ctx context.Context, tree *Tree) (res *ketoapi.Tree[*ketoapi.RelationTuple], err error)

func (*Mapper) ToTuple

func (m *Mapper) ToTuple(ctx context.Context, ts ...*RelationTuple) (res []*ketoapi.RelationTuple, err error)

type MapperProvider

type MapperProvider interface {
	Mapper() *Mapper
	ReadOnlyMapper() *Mapper
}

type MappingManager

type MappingManager interface {
	MapStringsToUUIDs(ctx context.Context, s ...string) ([]uuid.UUID, error)
	MapStringsToUUIDsReadOnly(ctx context.Context, s ...string) ([]uuid.UUID, error)
	MapUUIDsToStrings(ctx context.Context, u ...uuid.UUID) ([]string, error)
}

type MappingManagerProvider

type MappingManagerProvider interface {
	MappingManager() MappingManager
}

type RelationQuery

type RelationQuery struct {
	Namespace *string    `json:"namespace"`
	Object    *uuid.UUID `json:"object"`
	Relation  *string    `json:"relation"`
	Subject   Subject    `json:"subject_id,omitempty"`
}

type RelationTuple

type RelationTuple struct {
	Namespace string    `json:"namespace"`
	Object    uuid.UUID `json:"object"`
	Relation  string    `json:"relation"`
	Subject   Subject   `json:"subject"`
}

func (*RelationTuple) FromProto

func (t *RelationTuple) FromProto(proto *rts.RelationTuple) *RelationTuple

func (*RelationTuple) String

func (t *RelationTuple) String() string

func (*RelationTuple) ToProto

func (t *RelationTuple) ToProto() *rts.RelationTuple

func (*RelationTuple) ToQuery

func (t *RelationTuple) ToQuery() *RelationQuery

type Subject

type Subject interface {
	Equals(Subject) bool
	UniqueID() uuid.UUID
	String() string
}

type SubjectID

type SubjectID struct {
	ID uuid.UUID `json:"id"`
}

func (*SubjectID) Equals

func (s *SubjectID) Equals(other Subject) bool

func (*SubjectID) String

func (s *SubjectID) String() string

func (*SubjectID) UniqueID

func (s *SubjectID) UniqueID() uuid.UUID

type SubjectSet

type SubjectSet struct {
	Namespace string    `json:"namespace"`
	Object    uuid.UUID `json:"object"`
	Relation  string    `json:"relation"`
}

func (*SubjectSet) Equals

func (s *SubjectSet) Equals(other Subject) bool

func (*SubjectSet) String

func (s *SubjectSet) String() string

func (*SubjectSet) UniqueID

func (s *SubjectSet) UniqueID() uuid.UUID

type Traversal

type Traversal string
const (
	TraversalUnknown          Traversal = "unknown"
	TraversalSubjectSetExpand Traversal = "subject set expand"
	TraversalComputedUserset  Traversal = "computed userset"
	TraversalTupleToUserset   Traversal = "tuple to userset"
)

type TraversalResult

type TraversalResult struct {
	From  *RelationTuple
	To    *RelationTuple
	Via   Traversal
	Found bool
}

type Traverser

type Traverser interface {
	TraverseSubjectSetExpansion(ctx context.Context, tuple *RelationTuple) ([]*TraversalResult, error)
	TraverseSubjectSetRewrite(ctx context.Context, tuple *RelationTuple, computedSubjectSets []string) ([]*TraversalResult, error)
}

type Tree

type Tree struct {
	Type     ketoapi.TreeNodeType `json:"type"`
	Subject  Subject              `json:"subject"`
	Children []*Tree              `json:"children,omitempty"`
}

TODO(hperl): Also use a ketoapi.Tree here.

type TupleData

type TupleData interface {
	GetSubject() *rts.Subject
	GetObject() string
	GetNamespace() string
	GetRelation() string
}

Jump to

Keyboard shortcuts

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