perm

package
v0.3.39 Latest Latest
Warning

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

Go to latest
Published: Jul 7, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const DataObjectTypePrefix = "data-object:"

DataObjectTypePrefix marks permission rows that carry table-level rules. Such rows use a synthetic type_name ("data-object:query", "data-object:insert", "data-object:update", "data-object:delete") and put the data-object's GraphQL type name (or "*" for all data objects) in field_name. The ":" makes collision with real GraphQL type names impossible, so field-level rows are unaffected.

Variables

This section is empty.

Functions

func AuthVars added in v0.1.27

func AuthVars(ctx context.Context) map[string]any

func CtxWithPerm

func CtxWithPerm(ctx context.Context, perm *RolePermissions) context.Context

Types

type Op added in v0.3.39

type Op string

Op is a data-object operation for table-level permission lookups.

const (
	OpQuery  Op = "query"
	OpInsert Op = "insert"
	OpUpdate Op = "update"
	OpDelete Op = "delete"
)

type Permission

type Permission struct {
	Object   string         `json:"type_name"`
	Field    string         `json:"field_name"`
	Hidden   bool           `json:"hidden"`
	Disabled bool           `json:"disabled"`
	Filter   map[string]any `json:"filter"`
	Data     map[string]any `json:"data"`
}

type PermissionFieldRule added in v0.3.0

type PermissionFieldRule struct{}

PermissionFieldRule is an InlineRule that checks field access permissions using RolePermissions from the context.

func (*PermissionFieldRule) EnterArgument added in v0.3.0

func (*PermissionFieldRule) EnterDirective added in v0.3.0

func (*PermissionFieldRule) EnterField added in v0.3.0

func (r *PermissionFieldRule) EnterField(ctx *validator.WalkContext, parentDef *ast.Definition, field *ast.Field) gqlerror.List

func (*PermissionFieldRule) EnterFragment added in v0.3.0

type RolePermissions

type RolePermissions struct {
	Name           string       `json:"name"`
	Disabled       bool         `json:"disabled"`
	CanImpersonate bool         `json:"can_impersonate"`
	Permissions    []Permission `json:"permissions"`
}

func PermissionsFromCtx

func PermissionsFromCtx(ctx context.Context) *RolePermissions

func (*RolePermissions) CheckMutationInput

func (r *RolePermissions) CheckMutationInput(ctx context.Context, defs base.DefinitionsSource, inputName string, data map[string]any) error

func (*RolePermissions) CheckQuery

func (r *RolePermissions) CheckQuery(query *ast.Field) error

func (*RolePermissions) DataArgument

func (r *RolePermissions) DataArgument(ctx context.Context, object, field string) map[string]any

func (*RolePermissions) DataObjectData added in v0.3.39

func (r *RolePermissions) DataObjectData(ctx context.Context, objType string, op Op) map[string]any

DataObjectData returns the table-level data values for insert/update mutations, with [$auth.*] placeholders substituted. These values are applied over the client's data (force-stamp): a data-object:insert row with {owner_id: "[$auth.user_id]"} makes it impossible to insert rows for another principal regardless of the submitted data.

func (*RolePermissions) DataObjectDisabled added in v0.3.39

func (r *RolePermissions) DataObjectDisabled(objType string, op Op) bool

DataObjectDisabled reports whether the operation on the data object is denied. A disabled data-object:query row denies the table on EVERY path (reads and mutations alike); op-specific rows can additionally deny a single operation.

func (*RolePermissions) DataObjectFilter added in v0.3.39

func (r *RolePermissions) DataObjectFilter(ctx context.Context, objType string, op Op) map[string]any

DataObjectFilter returns the table-level filter for the data object, with [$auth.*] placeholders substituted. The filter is a property of the TABLE: the planner applies it wherever the object is materialised — top-level queries, _by_pk, relations, _join, aggregations, and mutation WHERE clauses. For OpDelete/OpUpdate the op-specific row's filter takes precedence; when it is absent the OpQuery filter applies (you cannot delete/update rows you cannot read, unless an op row explicitly widens or narrows the scope).

func (*RolePermissions) DataObjectHidden added in v0.3.39

func (r *RolePermissions) DataObjectHidden(objType string) bool

DataObjectHidden reports whether the data object is hidden from introspection (set on the data-object:query row). Fields returning a hidden data object are omitted from the introspected schema but remain queryable unless also disabled.

func (*RolePermissions) Enabled

func (r *RolePermissions) Enabled(object, field string) (*Permission, bool)

func (*RolePermissions) FilterArgument

func (r *RolePermissions) FilterArgument(ctx context.Context, object, field string) map[string]any

func (*RolePermissions) Visible

func (r *RolePermissions) Visible(object, field string) (*Permission, bool)

type Service

type Service struct {
	// contains filtered or unexported fields
}

func New

func New(qe types.Querier) *Service

func (*Service) ContextWithPermissions

func (s *Service) ContextWithPermissions(ctx context.Context) (context.Context, error)

func (*Service) RolePermissions

func (s *Service) RolePermissions(ctx context.Context) (RolePermissions, error)

type Store

type Store interface {
	// ContextWithPermissions returns a new context with the permissions of the user.
	ContextWithPermissions(ctx context.Context) (context.Context, error)
	RolePermissions(ctx context.Context) (RolePermissions, error)
}

Store manager that provides methods to to retrieve Role permissions info from context.

Jump to

Keyboard shortcuts

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