Introduces code.nochebuena.dev/einherjar/contracts — the zero-dependency foundation of the Einherjar framework. Defines the interfaces and minimal types consumed by every starter. Zero external dependencies. Zero Einherjar dependencies. Nothing is above it in the dependency graph. lifecycle: - Component — OnInit, OnStart, OnStop three-phase lifecycle hooks observability: - Level (LevelCritical=0, LevelDegraded); zero value is the safe default - Checkable — HealthCheck, Name, Priority - Identifiable — ModulePath, ModuleVersion; implemented by all starters to surface module identity and version in the startup banner logging: - Logger — Debug, Info, Warn, Error, With, WithContext errs: - CodedError — ErrorCode() string; satisfied by core/xerrors.Err - ContextualError — ErrorContext() map[string]any; satisfied by core/xerrors.Err security: - Identity value type — UID, TenantID, DisplayName, Email; NewIdentity, WithTenant - Permission (int64), MaxPermission=62, PermissionMask — Has, Grant - PermissionProvider — ResolveMask(ctx, uid, resource) (PermissionMask, error) - SecurityBag value type — immutable request-scoped security context; carries Identity and arbitrary typed attributes (hardware IDs, grant codes, etc.); With copies the attribute map on every call to preserve receiver-invariant behaviour - NewSecurityBag, Identity, WithIdentity, Get, With - SetBagInContext / BagFromContext — full bag context storage - SetInContext / FromContext — backed by SecurityBag; all four cross-function combinations (SetInContext+BagFromContext, SetBagInContext+FromContext) are valid One file per type; CT-6 enforced by compliance test AST walk.
20 lines
661 B
Go
20 lines
661 B
Go
package security
|
||
|
||
// Permission is a named bit position (0–62) representing a single capability.
|
||
//
|
||
// Applications define their own permission constants using this type:
|
||
//
|
||
// const (
|
||
// Read security.Permission = 0
|
||
// Write security.Permission = 1
|
||
// Delete security.Permission = 2
|
||
// )
|
||
//
|
||
// Valid positions are 0 through MaxPermission (62). Values outside that range
|
||
// are silently ignored by PermissionMask.Has and PermissionMask.Grant.
|
||
type Permission int64
|
||
|
||
// MaxPermission is the highest valid bit position for a Permission constant.
|
||
// Bit 63 is reserved for the sign bit of the underlying int64.
|
||
const MaxPermission Permission = 62
|