Documentation
¶
Overview ¶
package resource provides a set of types and functions for working with resources.
Index ¶
- func AddResources[Resource Resourcer, Request any](s *Collection, scope accesstypes.PermissionScope, ...) error
- func Operations(r *http.Request, pattern string) iter.Seq2[*Operation, error]
- func PatchsetCompare(a, b PatchSetComparer) bool
- func ProcessEvent(processName string) string
- func UserEvent(ctx context.Context) string
- func UserProcessEvent(ctx context.Context, processName string) string
- type Collection
- func (s *Collection) AddResource(scope accesstypes.PermissionScope, permission accesstypes.Permission, ...) error
- func (s *Collection) GenerateTypeScript(dst string) error
- func (s *Collection) IsResourceImmutable(scope accesstypes.PermissionScope, res accesstypes.Resource) bool
- func (s *Collection) List() map[accesstypes.Permission][]accesstypes.Resource
- func (s *Collection) Scope(resource accesstypes.Resource) accesstypes.PermissionScope
- type Columns
- type Config
- type Configurer
- type DBType
- type DataChangeEvent
- type Decoder
- func (d *Decoder[Resource, Request]) Decode(request *http.Request) (*PatchSet[Resource], error)
- func (d *Decoder[Resource, Request]) WithPermissionChecker(domainFromReq DomainFromReq, userFromReq UserFromReq, ...) *DecoderWithPermissionChecker[Resource, Request]
- func (d *Decoder[Resource, Request]) WithValidator(v ValidatorFunc) *Decoder[Resource, Request]
- type DecoderWithPermissionChecker
- func (d *DecoderWithPermissionChecker[Resource, Request]) Decode(request *http.Request, perm accesstypes.Permission) (*PatchSet[Resource], error)
- func (d *DecoderWithPermissionChecker[Resource, Request]) DecodeOperation(oper *Operation) (*PatchSet[Resource], error)
- func (d *DecoderWithPermissionChecker[Resource, Request]) WithValidator(v ValidatorFunc) *DecoderWithPermissionChecker[Resource, Request]
- type DiffElem
- type DomainFromCtx
- type DomainFromReq
- type FieldMapper
- type KeyPart
- type KeySet
- type Operation
- type OperationType
- type PatchSet
- func (p *PatchSet[Resource]) Data() map[accesstypes.Field]any
- func (p *PatchSet[Resource]) Diff(old any) (map[accesstypes.Field]DiffElem, error)
- func (p *PatchSet[Resource]) Fields() []accesstypes.Field
- func (p *PatchSet[Resource]) Get(field accesstypes.Field) any
- func (p *PatchSet[Resource]) HasKey() bool
- func (p *PatchSet[Resource]) IsSet(field accesstypes.Field) bool
- func (p *PatchSet[Resource]) Key(field accesstypes.Field) any
- func (p *PatchSet[Resource]) Len() int
- func (p *PatchSet[Resource]) PatchType() PatchType
- func (p *PatchSet[Resource]) PrimaryKey() KeySet
- func (p *PatchSet[Resource]) Resolve() (map[string]any, error)
- func (p *PatchSet[Resource]) Resource() accesstypes.Resource
- func (p *PatchSet[Resource]) Set(field accesstypes.Field, value any) *PatchSet[Resource]
- func (p *PatchSet[Resource]) SetKey(field accesstypes.Field, value any) *PatchSet[Resource]
- func (p *PatchSet[Resource]) SetPatchType(t PatchType) *PatchSet[Resource]
- func (p *PatchSet[Resource]) SpannerApply(ctx context.Context, spanner *spanner.Client, eventSource ...string) error
- func (p *PatchSet[Resource]) SpannerBuffer(ctx context.Context, txn *spanner.ReadWriteTransaction, eventSource ...string) error
- func (p *PatchSet[Resource]) SpannerBufferInsertOrUpdate(ctx context.Context, txn *spanner.ReadWriteTransaction, eventSource ...string) error
- func (p *PatchSet[Resource]) SpannerInsertOrUpdate(ctx context.Context, s *spanner.Client, eventSource ...string) error
- type PatchSetComparer
- type PatchType
- type QueryDecoder
- type QuerySet
- func (q *QuerySet[Resource]) AddField(field accesstypes.Field) *QuerySet[Resource]
- func (q *QuerySet[Resource]) Columns() (Columns, error)
- func (q *QuerySet[Resource]) Fields() []accesstypes.Field
- func (q *QuerySet[Resource]) Key(field accesstypes.Field) any
- func (q *QuerySet[Resource]) KeySet() KeySet
- func (q *QuerySet[Resource]) Len() int
- func (q *QuerySet[Resource]) PostgresStmt() (stmt Stmt, params map[string]any, err error)
- func (q *QuerySet[Resource]) Resource() accesstypes.Resource
- func (q *QuerySet[Resource]) SetKey(field accesstypes.Field, value any)
- func (q *QuerySet[Resource]) SpannerList(ctx context.Context, txn *spanner.ReadOnlyTransaction, dst any) error
- func (q *QuerySet[Resource]) SpannerRead(ctx context.Context, txn *spanner.ReadOnlyTransaction, dst any) error
- func (q *QuerySet[Resource]) SpannerStmt() (spanner.Statement, error)
- func (q *QuerySet[Resource]) Where() (where Where, params map[string]any, err error)
- type Queryer
- type ResourceMetadata
- type ResourceSet
- func (r *ResourceSet[Resource, Request]) BaseResource() accesstypes.Resource
- func (r *ResourceSet[Resource, Request]) ImmutableFields() map[accesstypes.Tag]struct{}
- func (r *ResourceSet[Resource, Request]) Permission() accesstypes.Permission
- func (r *ResourceSet[Resource, Request]) PermissionRequired(fieldName accesstypes.Field, perm accesstypes.Permission) bool
- func (r *ResourceSet[Resource, Request]) Permissions() []accesstypes.Permission
- func (r *ResourceSet[Resource, Request]) Resource(fieldName accesstypes.Field) accesstypes.Resource
- func (r *ResourceSet[Resource, Request]) ResourceMetadata() *ResourceMetadata[Resource]
- func (r *ResourceSet[Resource, Request]) TagPermissions() accesstypes.TagPermissions
- type Resourcer
- type SpannerBufferer
- type SpannerLister
- type SpannerReader
- type Stmt
- type StructDecoder
- func (d *StructDecoder[Request]) Decode(request *http.Request) (*Request, error)
- func (d *StructDecoder[Request]) WithPermissionChecker(domainFromReq DomainFromReq, userFromReq UserFromReq, ...) *StructDecoderWithPermissionChecker[Request]
- func (d *StructDecoder[Request]) WithValidator(v ValidatorFunc) *StructDecoder[Request]
- type StructDecoderWithPermissionChecker
- type TSGenerator
- type UserFromCtx
- type UserFromReq
- type ValidatorFunc
- type Where
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AddResources ¶ added in v0.0.3
func AddResources[Resource Resourcer, Request any](s *Collection, scope accesstypes.PermissionScope, rSet *ResourceSet[Resource, Request]) error
func Operations ¶ added in v0.0.3
func PatchsetCompare ¶ added in v0.0.3
func PatchsetCompare(a, b PatchSetComparer) bool
func ProcessEvent ¶ added in v0.0.3
Types ¶
type Collection ¶
type Collection struct {
// contains filtered or unexported fields
}
func NewCollection ¶
func NewCollection() *Collection
func (*Collection) AddResource ¶
func (s *Collection) AddResource(scope accesstypes.PermissionScope, permission accesstypes.Permission, res accesstypes.Resource) error
func (*Collection) GenerateTypeScript ¶
func (s *Collection) GenerateTypeScript(dst string) error
func (*Collection) IsResourceImmutable ¶
func (s *Collection) IsResourceImmutable(scope accesstypes.PermissionScope, res accesstypes.Resource) bool
func (*Collection) List ¶
func (s *Collection) List() map[accesstypes.Permission][]accesstypes.Resource
func (*Collection) Scope ¶
func (s *Collection) Scope(resource accesstypes.Resource) accesstypes.PermissionScope
type Config ¶ added in v0.0.3
func (Config) SetChangeTrackingTable ¶ added in v0.0.3
func (Config) SetTrackChanges ¶ added in v0.0.3
type Configurer ¶ added in v0.0.3
type Configurer interface {
Config() Config
}
type DataChangeEvent ¶ added in v0.0.3
type Decoder ¶ added in v0.0.3
Decoder is a struct that can be used for decoding http requests and validating those requests
func NewDecoder ¶ added in v0.0.3
func NewDecoder[Resource Resourcer, Request any](rSet *ResourceSet[Resource, Request]) (*Decoder[Resource, Request], error)
func (*Decoder[Resource, Request]) WithPermissionChecker ¶ added in v0.0.3
func (d *Decoder[Resource, Request]) WithPermissionChecker(domainFromReq DomainFromReq, userFromReq UserFromReq, enforcer accesstypes.Enforcer) *DecoderWithPermissionChecker[Resource, Request]
func (*Decoder[Resource, Request]) WithValidator ¶ added in v0.0.3
func (d *Decoder[Resource, Request]) WithValidator(v ValidatorFunc) *Decoder[Resource, Request]
type DecoderWithPermissionChecker ¶ added in v0.0.3
type DecoderWithPermissionChecker[Resource Resourcer, Request any] struct { // contains filtered or unexported fields }
func (*DecoderWithPermissionChecker[Resource, Request]) Decode ¶ added in v0.0.3
func (d *DecoderWithPermissionChecker[Resource, Request]) Decode(request *http.Request, perm accesstypes.Permission) (*PatchSet[Resource], error)
func (*DecoderWithPermissionChecker[Resource, Request]) DecodeOperation ¶ added in v0.0.3
func (d *DecoderWithPermissionChecker[Resource, Request]) DecodeOperation(oper *Operation) (*PatchSet[Resource], error)
func (*DecoderWithPermissionChecker[Resource, Request]) WithValidator ¶ added in v0.0.3
func (d *DecoderWithPermissionChecker[Resource, Request]) WithValidator(v ValidatorFunc) *DecoderWithPermissionChecker[Resource, Request]
type DomainFromCtx ¶ added in v0.0.3
type DomainFromCtx func(context.Context) accesstypes.Domain
type DomainFromReq ¶ added in v0.0.3
type DomainFromReq func(*http.Request) accesstypes.Domain
type FieldMapper ¶
type FieldMapper struct {
// contains filtered or unexported fields
}
func NewFieldMapper ¶
func NewFieldMapper(v any) (*FieldMapper, error)
func (*FieldMapper) Fields ¶
func (f *FieldMapper) Fields() []accesstypes.Field
func (*FieldMapper) Len ¶
func (f *FieldMapper) Len() int
func (*FieldMapper) StructFieldName ¶
func (f *FieldMapper) StructFieldName(tag string) (accesstypes.Field, bool)
type KeyPart ¶
type KeyPart struct {
Key accesstypes.Field
Value any
}
type KeySet ¶
type KeySet struct {
// contains filtered or unexported fields
}
KeySet is an object that represents a single or composite primary key and its value.
type Operation ¶ added in v0.0.3
type Operation struct {
Type OperationType
Req *http.Request
}
type OperationType ¶ added in v0.0.3
type OperationType string
const ( OperationCreate OperationType = "add" OperationUpdate OperationType = "patch" OperationDelete OperationType = "remove" )
type PatchSet ¶
type PatchSet[Resource Resourcer] struct { // contains filtered or unexported fields }
func NewPatchSet ¶
func NewPatchSet[Resource Resourcer](rMeta *ResourceMetadata[Resource]) *PatchSet[Resource]
func (*PatchSet[Resource]) Diff ¶ added in v0.0.3
Diff returns a map of fields that have changed between old and patchSet.
func (*PatchSet[Resource]) Fields ¶
func (p *PatchSet[Resource]) Fields() []accesstypes.Field
func (*PatchSet[Resource]) IsSet ¶ added in v0.0.3
func (p *PatchSet[Resource]) IsSet(field accesstypes.Field) bool
func (*PatchSet[Resource]) PrimaryKey ¶ added in v0.0.3
func (*PatchSet[Resource]) Resolve ¶ added in v0.0.3
Resolve returns a map with the keys set to the database struct tags found on databaseType, and the values set to the values in patchSet.
func (*PatchSet[Resource]) Resource ¶ added in v0.0.3
func (p *PatchSet[Resource]) Resource() accesstypes.Resource
func (*PatchSet[Resource]) Set ¶
func (p *PatchSet[Resource]) Set(field accesstypes.Field, value any) *PatchSet[Resource]
func (*PatchSet[Resource]) SetKey ¶
func (p *PatchSet[Resource]) SetKey(field accesstypes.Field, value any) *PatchSet[Resource]
func (*PatchSet[Resource]) SetPatchType ¶ added in v0.0.3
func (*PatchSet[Resource]) SpannerApply ¶ added in v0.0.6
func (*PatchSet[Resource]) SpannerBuffer ¶ added in v0.0.3
func (*PatchSet[Resource]) SpannerBufferInsertOrUpdate ¶ added in v0.0.3
type PatchSetComparer ¶ added in v0.0.3
type PatchSetComparer interface {
Data() map[accesstypes.Field]any
Fields() []accesstypes.Field
PatchType() PatchType
PrimaryKey() KeySet
}
type QueryDecoder ¶ added in v0.0.3
type QueryDecoder[Resource Resourcer, Request any] struct { // contains filtered or unexported fields }
QueryDecoder is a struct that returns columns that a given user has access to view
func NewQueryDecoder ¶ added in v0.0.3
func NewQueryDecoder[Resource Resourcer, Request any](rSet *ResourceSet[Resource, Request], permissionChecker accesstypes.Enforcer, domainFromCtx DomainFromCtx, userFromCtx UserFromCtx) (*QueryDecoder[Resource, Request], error)
type QuerySet ¶
type QuerySet[Resource Resourcer] struct { // contains filtered or unexported fields }
func NewQuerySet ¶
func NewQuerySet[Resource Resourcer](rMeta *ResourceMetadata[Resource]) *QuerySet[Resource]
func (*QuerySet[Resource]) AddField ¶
func (q *QuerySet[Resource]) AddField(field accesstypes.Field) *QuerySet[Resource]
func (*QuerySet[Resource]) Columns ¶ added in v0.0.3
Columns returns the database struct tags for the fields in databaseType that the user has access to view.
func (*QuerySet[Resource]) Fields ¶
func (q *QuerySet[Resource]) Fields() []accesstypes.Field
func (*QuerySet[Resource]) Key ¶ added in v0.0.3
func (q *QuerySet[Resource]) Key(field accesstypes.Field) any
func (*QuerySet[Resource]) PostgresStmt ¶ added in v0.0.3
func (*QuerySet[Resource]) Resource ¶ added in v0.0.3
func (q *QuerySet[Resource]) Resource() accesstypes.Resource
func (*QuerySet[Resource]) SetKey ¶ added in v0.0.3
func (q *QuerySet[Resource]) SetKey(field accesstypes.Field, value any)
func (*QuerySet[Resource]) SpannerList ¶ added in v0.0.3
func (*QuerySet[Resource]) SpannerRead ¶ added in v0.0.3
func (*QuerySet[Resource]) SpannerStmt ¶ added in v0.0.3
type ResourceMetadata ¶ added in v0.0.3
type ResourceMetadata[Resource Resourcer] struct { // contains filtered or unexported fields }
func NewResourceMetadata ¶ added in v0.0.3
func NewResourceMetadata[Resource Resourcer]() *ResourceMetadata[Resource]
type ResourceSet ¶
type ResourceSet[Resource Resourcer, Request any] struct { // contains filtered or unexported fields }
func NewResourceSet ¶
func NewResourceSet[Resource Resourcer, Request any](permissions ...accesstypes.Permission) (*ResourceSet[Resource, Request], error)
func (*ResourceSet[Resource, Request]) BaseResource ¶
func (r *ResourceSet[Resource, Request]) BaseResource() accesstypes.Resource
func (*ResourceSet[Resource, Request]) ImmutableFields ¶
func (r *ResourceSet[Resource, Request]) ImmutableFields() map[accesstypes.Tag]struct{}
func (*ResourceSet[Resource, Request]) Permission ¶
func (r *ResourceSet[Resource, Request]) Permission() accesstypes.Permission
func (*ResourceSet[Resource, Request]) PermissionRequired ¶
func (r *ResourceSet[Resource, Request]) PermissionRequired(fieldName accesstypes.Field, perm accesstypes.Permission) bool
func (*ResourceSet[Resource, Request]) Permissions ¶
func (r *ResourceSet[Resource, Request]) Permissions() []accesstypes.Permission
func (*ResourceSet[Resource, Request]) Resource ¶
func (r *ResourceSet[Resource, Request]) Resource(fieldName accesstypes.Field) accesstypes.Resource
func (*ResourceSet[Resource, Request]) ResourceMetadata ¶ added in v0.0.3
func (r *ResourceSet[Resource, Request]) ResourceMetadata() *ResourceMetadata[Resource]
func (*ResourceSet[Resource, Request]) TagPermissions ¶
func (r *ResourceSet[Resource, Request]) TagPermissions() accesstypes.TagPermissions
type Resourcer ¶
type Resourcer interface {
Resource() accesstypes.Resource
DefaultConfig() Config
}
type SpannerBufferer ¶ added in v0.0.3
type SpannerBufferer interface {
SpannerBuffer(ctx context.Context, txn *spanner.ReadWriteTransaction, eventSource ...string) error
Resource() accesstypes.Resource
PrimaryKey() KeySet
}
type SpannerLister ¶ added in v0.0.3
type SpannerReader ¶ added in v0.0.3
type SpannerReader interface {
SpannerRead(ctx context.Context, txn *spanner.ReadOnlyTransaction, dst any) error
Resource() accesstypes.Resource
KeySet() KeySet
}
type StructDecoder ¶ added in v0.0.3
type StructDecoder[Request any] struct { // contains filtered or unexported fields }
StructDecoder is a struct that can be used for decoding http requests and validating those requests
func NewStructDecoder ¶ added in v0.0.3
func NewStructDecoder[Request any]() (*StructDecoder[Request], error)
func (*StructDecoder[Request]) Decode ¶ added in v0.0.3
func (d *StructDecoder[Request]) Decode(request *http.Request) (*Request, error)
Decode parses the http request body and validates it against the struct validation rules and returns a named patchset
func (*StructDecoder[Request]) WithPermissionChecker ¶ added in v0.0.3
func (d *StructDecoder[Request]) WithPermissionChecker(domainFromReq DomainFromReq, userFromReq UserFromReq, enforcer accesstypes.Enforcer) *StructDecoderWithPermissionChecker[Request]
func (*StructDecoder[Request]) WithValidator ¶ added in v0.0.3
func (d *StructDecoder[Request]) WithValidator(v ValidatorFunc) *StructDecoder[Request]
type StructDecoderWithPermissionChecker ¶ added in v0.0.3
type StructDecoderWithPermissionChecker[Request any] struct { // contains filtered or unexported fields }
func (*StructDecoderWithPermissionChecker[Request]) Decode ¶ added in v0.0.3
func (d *StructDecoderWithPermissionChecker[Request]) Decode(request *http.Request, perm accesstypes.Permission) (*Request, error)
Decode parses the http request body and validates it against the struct validation rules
func (*StructDecoderWithPermissionChecker[Request]) WithValidator ¶ added in v0.0.3
func (d *StructDecoderWithPermissionChecker[Request]) WithValidator(v ValidatorFunc) *StructDecoderWithPermissionChecker[Request]
type TSGenerator ¶
type TSGenerator struct {
Permissions []accesstypes.Permission
Resources []accesstypes.Resource
ResourceTags map[accesstypes.Resource][]accesstypes.Tag
ResourcePermissions permissionMap
Domains []accesstypes.PermissionScope
}
type UserFromCtx ¶ added in v0.0.3
type UserFromCtx func(context.Context) accesstypes.User
type UserFromReq ¶ added in v0.0.3
type UserFromReq func(*http.Request) accesstypes.User
type ValidatorFunc ¶ added in v0.0.3
type ValidatorFunc interface {
Struct(s interface{}) error
StructPartial(s interface{}, fields ...string) error
}
ValidatorFunc is a function that validates s It returns an error if the validation fails