载入中...
搜索中...
未找到
Authority.cpp
浏览该文件的文档.
35 std::invoke(std::forward<Release>(release), ref).ignore("rollback failed owned authority allocation");
39 auto result = eve::script::projectStatusResult(vm, eve::Status::success(eve::StatusCode::Applied));
132std::string effectName(RuleEffect effect) { return effect == RuleEffect::Grant ? "grant" : "deny"; }
145 if (actor.empty() || scope.empty() || capability.empty() || !std::isfinite(duration)) return {};
165std::string Store::grant(const std::string& actor, const std::string& scope, const std::string& capability,
169std::string Store::deny(const std::string& actor, const std::string& scope, const std::string& capability,
175 events_.push_back({nextSequence_++, kind, rule.id, rule.actor, rule.scope, rule.capability, rule.source, reason});
179 const auto it = std::find_if(rules_.begin(), rules_.end(), [&id](const Rule& rule) { return rule.id == id; });
225Decision Store::explain(const std::string& actor, const std::string& scope, const std::string& capability) const {
232 return {winner->effect == RuleEffect::Grant, winner->effect == RuleEffect::Grant ? "granted" : "denied", winner->id,
235bool Store::can(const std::string& actor, const std::string& scope, const std::string& capability) const {
239 const auto it = std::find_if(rules_.begin(), rules_.end(), [&id](const Rule& rule) { return rule.id == id; });
243int Store::query(const std::string& actor, const std::string& scope, const std::string& capability) {
277 out << "{\"id\":" << quote(rule.id) << ",\"actor\":" << quote(rule.actor) << ",\"scope\":" << quote(rule.scope)
291 if (!document.valid() || !root.isObject() || root.getInt("version") != 1 || !parseU64(root.get("nextId"), nextId) ||
292 !parseU64(root.get("nextOrder"), nextOrder) || !parseU64(root.get("nextSequence"), nextSequence) ||
309 !item.get("priority").isNumber() || !item.get("duration").isNumber() || !item.get("remaining").isNumber()) {
311 eve::Diagnostic::error(eve::DiagnosticCode::ParseError, "invalid rule at index " + std::to_string(i),
346eve::Result<eve::SnapshotEnvelope> Store::snapshot(const eve::SnapshotHashProvider& hashProvider) const {
349 return eve::makeSnapshotEnvelope("authority.store", authoritySchema(), eve::SchemaVersion(1), instanceId_,
365 auto metadata = eve::validateSnapshotPayloadMetadata(candidate.payload, candidate.revision, candidate.tick);
382eve::Result<std::string> Store::snapshotEnvelopeJson(const eve::SnapshotHashProvider& hashProvider) const {
389eve::Result<void> Store::restoreSnapshotJson(std::string_view json, const eve::SnapshotHashProvider& hashProvider) {
425 auto rule = table.addClass<Rule>("AuthorityRule", std::function<Rule*()>([] { return nullptr; }), false);
433 rule.addFunc("getRemaining", [](Rule* r) { return r ? static_cast<float>(r->remaining) : 0.0f; });
436 table.addClass<Decision>("AuthorityDecision", std::function<Decision*()>([] { return nullptr; }), false);
439 decision.addFunc("getWinningRuleId", [](Decision* d) { return d ? d->winningRuleId : std::string{}; });
443 auto event = table.addClass<Event>("AuthorityEvent", std::function<Event*()>([] { return nullptr; }), false);
444 event.addFunc("getSequence", [](Event* e) { return e ? static_cast<int64_t>(e->sequence) : int64_t{0}; });
449 auto store = table.addClass<Store>("AuthorityStore", std::function<Store*()>([] { return nullptr; }), false);
466 "find", [](Store* s, const std::string& id) -> Rule* { return s ? const_cast<Rule*>(s->find(id)) : nullptr; });
472 [](Store* s, int index) -> Rule* { return s ? const_cast<Rule*>(s->queryAt(index)) : nullptr; });
475 [](Store* s, int index) -> Event* { return s ? const_cast<Event*>(s->eventAt(index)) : nullptr; });
555 ownedStore.addFunc("revoke", [](ScriptAuthorityStore* value, const std::string& id, const std::string& reason) {
568 ownedStore.addFunc("can", [](ScriptAuthorityStore* value, const std::string& actor, const std::string& scope,
573 ownedStore.addFunc("explain", [](ScriptAuthorityStore* value, const std::string& actor, const std::string& scope,
590 ownedStore.addFunc("queryCapability", [](ScriptAuthorityStore* value, const std::string& capability) {
594 ownedStore.addFunc("query", [](ScriptAuthorityStore* value, const std::string& actor, const std::string& scope,
The single Squirrel projection for common Result, Status and Value.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
static std::optional< LogicalId > parse(std::string_view text)
Parses a scoped logical name.
Definition Identity.cpp:36
void ignore(std::string_view reason={}) const noexcept
Explicitly discard this result after documenting the reason.
Definition Result.h:537
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< void > add(LogicalId schema, SchemaVersion from, SchemaVersion to, Migration migration)
Register one schema-local migration edge.
Definition Snapshot.cpp:196
static Status failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
static Result< Value > fromJson(std::string_view json)
Parse one strict JSON value into an owning Value.
Definition Value.cpp:57
Script module factory for generic authority stores.
Definition Authority.h:176
static eve::Result< void > release(AuthorityStoreHandleRef reference)
Releases a module-owned store.
Definition Authority.cpp:406
static eve::Result< AuthorityStoreHandleRef > newStore()
Allocates an authority store and returns its ownership reference.
Definition Authority.cpp:395
static bool isStale(AuthorityStoreHandleRef reference) noexcept
Reports whether a store reference is stale for the current module.
Definition Authority.cpp:415
static eve::script::Borrowed< Store > resolve(AuthorityStoreHandleRef reference) noexcept
Resolves a live store as a non-owning observation.
Definition Authority.cpp:400
const Rule * queryAt(int index) const
Returns a rule from the latest query, or nullptr.
Definition Authority.cpp:254
Store(eve::PersistentId instanceId={})
Creates an authority store with an optional persistent identity.
Definition Authority.cpp:130
std::string deny(const std::string &actor, const std::string &scope, const std::string &capability, const std::string &source, int priority=0, double duration=0.0)
Adds a deny rule and returns its stable ID, or an empty string for invalid input.
Definition Authority.cpp:169
void update(double dtSeconds)
Advances finite rule durations and expires rules reaching zero.
Definition Authority.cpp:204
eve::Result< void > restoreSnapshot(const eve::SnapshotEnvelope &snapshot, const eve::SnapshotHashProvider &hashProvider)
Restores a verified or migratable snapshot transactionally.
Definition Authority.cpp:353
std::string grant(const std::string &actor, const std::string &scope, const std::string &capability, const std::string &source, int priority=0, double duration=0.0)
Adds a grant rule and returns its stable ID, or an empty string for invalid input.
Definition Authority.cpp:165
int revokeBySource(const std::string &source, const std::string &reason="source_revoked")
Revokes every rule from a source and returns the number removed.
Definition Authority.cpp:188
int queryScope(const std::string &scope)
Queries rules for a scope in deterministic creation order.
Definition Authority.cpp:252
bool revoke(const std::string &id, const std::string &reason="revoked")
Revokes a rule by stable ID.
Definition Authority.cpp:178
eve::Result< std::string > snapshotEnvelopeJson(const eve::SnapshotHashProvider &hashProvider) const
Serializes the common snapshot envelope as canonical JSON.
Definition Authority.cpp:382
eve::Result< void > restoreSnapshotJson(std::string_view json, const eve::SnapshotHashProvider &hashProvider)
Parses and transactionally restores a common snapshot envelope.
Definition Authority.cpp:389
int query(const std::string &actor, const std::string &scope, const std::string &capability)
Queries rules matching actor, scope, and capability. Empty fields act as wildcards.
Definition Authority.cpp:243
void clearEvents()
Clears retained events without resetting sequence allocation.
Definition Authority.cpp:261
const Event * eventAt(int index) const
Returns a retained event, or nullptr.
Definition Authority.cpp:258
int queryActor(const std::string &actor)
Queries rules for an actor in deterministic creation order.
Definition Authority.cpp:251
const Rule * find(const std::string &id) const
Returns a rule by stable ID, or nullptr.
Definition Authority.cpp:238
bool can(const std::string &actor, const std::string &scope, const std::string &capability) const
Returns whether the winning rule allows a capability.
Definition Authority.cpp:235
Decision explain(const std::string &actor, const std::string &scope, const std::string &capability) const
Returns an explainable decision and its winning rule.
Definition Authority.cpp:225
eve::Result< eve::SnapshotEnvelope > snapshot(const eve::SnapshotHashProvider &hashProvider) const
Captures this store in the common versioned snapshot envelope.
Definition Authority.cpp:346
eve::Result< void > restoreJson(const std::string &json)
Transactionally restores a snapshot produced by snapshotJson().
Definition Authority.cpp:286
int queryCapability(const std::string &capability)
Queries rules for a capability in deterministic creation order.
Definition Authority.cpp:253
std::string snapshotJson() const
Exports persistent state as deterministic compact JSON.
Definition Authority.cpp:268
constexpr bool isNil() const noexcept
Returns whether this value is the all-zero nil ID.
Definition Identity.h:176
static Document parse(const std::string &text, std::string *error=nullptr)
Parse.
Definition Json.cpp:581
Non-owning C++ observation with no implicit lifetime extension.
Definition RuntimeRegistry.h:42
Definition Authority.cpp:15
std::string effectName(RuleEffect effect)
Returns the stable lowercase name of a rule effect.
Definition Authority.cpp:132
eve::script::RuntimeHandleRef< AuthorityStoreHandleTag > AuthorityStoreHandleRef
Generation- and module-epoch-qualified authority store reference.
Definition Authority.h:21
@ Expired
@ Granted
@ Revoked
std::string eventKindName(EventKind kind)
Returns the stable lowercase name of an event kind.
Definition Authority.cpp:133
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
constexpr HexDirection next(HexDirection d) noexcept
The next direction clockwise (NW wraps to NE).
Definition HexMetrics.h:76
@ Borrowed
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
Definition SquirrelBinding.cpp:454
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
@ Decision
@ InvalidArgument
@ InvariantViolation
@ ParseError
@ StaleHandle
@ Conflict
Result< void > validateSnapshotPayloadMetadata(const Value &payload, Revision revision, SimulationTick tick)
Validate optional payload copies of envelope revision and tick.
Definition Snapshot.cpp:80
@ Applied
Result< SnapshotEnvelope > parseSnapshotEnvelope(std::string_view json, const SnapshotHashProvider &hashProvider)
Parse and verify an envelope from canonical or compatible JSON text.
Definition Snapshot.cpp:190
Result< std::string > serializeSnapshotEnvelope(const SnapshotEnvelope &snapshot)
Serialize an envelope as deterministic compact JSON.
Definition Snapshot.cpp:184
Result< SnapshotEnvelope > makeSnapshotEnvelope(std::string type, LogicalId schema, SchemaVersion schemaVersion, PersistentId instanceId, Revision revision, SimulationTick tick, Value payload, const SnapshotHashProvider &hashProvider)
Construct and seal a snapshot envelope.
Definition Snapshot.cpp:103
detail::StrongUint64< detail::RevisionTag > Revision
Monotonic content/state revision used for optimistic-concurrency checks.
Definition Revision.h:13
std::function< Result< ContentId >(std::string_view canonicalInput)> SnapshotHashProvider
Injected content-digest implementation used by snapshots.
Definition Snapshot.h:36
Definition Container.h:602
Stable outer format shared by persistence and cross-process snapshots.
Definition Snapshot.h:46
Deterministically sequenced authority lifecycle event.
Definition Authority.h:53
One stable authority rule over an opaque actor and scope.
Definition Authority.h:27
Handle plus owner-lifetime epoch for a non-ECS registry object.
Definition RuntimeRegistry.h:91
constexpr bool isValid() const noexcept
Returns whether both the handle and its registry epoch are set.
Definition RuntimeRegistry.h:96