载入中...
搜索中...
未找到
Authority.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Module.h"
6#include "common/Snapshot.h"
8
9#include <cstdint>
10#include <deque>
11#include <memory>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace eve::authority {
17
22
24enum class RuleEffect { Grant, Deny };
25
27struct Rule {
28 std::string id;
29 std::string actor;
30 std::string scope;
31 std::string capability;
32 std::string source;
34 int priority = 0;
35 double duration = 0.0;
36 double remaining = -1.0;
37 uint64_t order = 0;
38};
39
41struct Decision {
42 bool allowed = false;
43 std::string reason;
44 std::string winningRuleId;
45 std::string source;
46 int priority = 0;
47};
48
51
53struct Event {
54 uint64_t sequence = 0;
56 std::string ruleId;
57 std::string actor;
58 std::string scope;
59 std::string capability;
60 std::string source;
61 std::string reason;
62};
63
66public:
71 explicit Store(eve::PersistentId instanceId = {});
72
74 std::string grant(const std::string& actor, const std::string& scope, const std::string& capability,
75 const std::string& source, int priority = 0, double duration = 0.0);
77 std::string deny(const std::string& actor, const std::string& scope, const std::string& capability,
78 const std::string& source, int priority = 0, double duration = 0.0);
80 bool revoke(const std::string& id, const std::string& reason = "revoked");
82 int revokeBySource(const std::string& source, const std::string& reason = "source_revoked");
84 void update(double dtSeconds);
85
87 bool can(const std::string& actor, const std::string& scope, const std::string& capability) const;
89 Decision explain(const std::string& actor, const std::string& scope, const std::string& capability) const;
91 const Rule* find(const std::string& id) const;
92
94 int queryActor(const std::string& actor);
96 int queryScope(const std::string& scope);
98 int queryCapability(const std::string& capability);
100 int query(const std::string& actor, const std::string& scope, const std::string& capability);
102 const Rule* queryAt(int index) const;
103
105 int eventCount() const;
107 const Event* eventAt(int index) const;
109 void clearEvents();
111 std::string snapshotJson() const;
120 [[nodiscard]] eve::Result<void> restoreJson(const std::string& json);
121
127 [[nodiscard]] eve::Result<eve::SnapshotEnvelope> snapshot(const eve::SnapshotHashProvider& hashProvider) const;
128
135 [[nodiscard]] eve::Result<void> restoreSnapshot(const eve::SnapshotEnvelope& snapshot,
136 const eve::SnapshotHashProvider& hashProvider);
137
143 [[nodiscard]] eve::Result<std::string> snapshotEnvelopeJson(const eve::SnapshotHashProvider& hashProvider) const;
144
151 [[nodiscard]] eve::Result<void> restoreSnapshotJson(std::string_view json,
152 const eve::SnapshotHashProvider& hashProvider);
153
154private:
155 std::string add(RuleEffect effect, const std::string& actor, const std::string& scope,
156 const std::string& capability, const std::string& source, int priority, double duration);
157 void emit(EventKind kind, const Rule& rule, const std::string& reason = {});
158
159 uint64_t nextId_ = 1;
160 uint64_t nextOrder_ = 1;
161 uint64_t nextSequence_ = 1;
162 eve::PersistentId instanceId_;
163 eve::Revision revision_;
165 std::deque<Rule> rules_;
166 std::deque<Event> events_;
167 std::vector<const Rule*> query_;
168};
169
171std::string effectName(RuleEffect effect);
174
176class Authority : public Module {
177public:
180 Authority() = default;
182 ~Authority() override = default;
183
189 [[nodiscard]] static eve::Result<AuthorityStoreHandleRef> newStore();
195 [[nodiscard]] static bool isStale(AuthorityStoreHandleRef reference) noexcept;
196
197private:
199};
200
201} // namespace eve::authority
float duration
AuthorityStoreHandleRef reference
Definition Authority.cpp:24
int priority
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
JobScope scope
TokenKind kind
std::unique_ptr< ParticleEffect > effect
std::function< eve::Result< void >()> release
Definition Procgen.cpp:86
Versioned, integrity-checked persistence envelopes.
Explicit Value/Owned/Borrowed semantics at the Squirrel boundary.
uint32_t index
const UnitySourceAsset & source
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Script module factory for generic authority stores.
Definition Authority.h:176
static eve::Result< AuthorityStoreHandleRef > newStore()
Allocates an authority store and returns its ownership reference.
static bool isStale(AuthorityStoreHandleRef reference) noexcept
Reports whether a store reference is stale for the current module.
static eve::script::Borrowed< Store > resolve(AuthorityStoreHandleRef reference) noexcept
Resolves a live store as a non-owning observation.
~Authority() override=default
Releases Authority resources.
Authority()=default
Constructs a Authority.
Generic, deterministic capability authority store.
Definition Authority.h:65
Id128 public API.
Definition Identity.h:112
Non-owning C++ observation with no implicit lifetime extension.
Slot/generation registry whose objects are exclusively unique-owned.
std::string effectName(RuleEffect effect)
Returns the stable lowercase name of a rule effect.
EventKind
Kind of authority lifecycle event.
Definition Authority.h:50
RuleEffect
Whether an authority rule grants or denies a capability.
Definition Authority.h:24
std::string eventKindName(EventKind kind)
Returns the stable lowercase name of an event kind.
std::function< Result< ContentId >(std::string_view canonicalInput)> SnapshotHashProvider
Injected content-digest implementation used by snapshots.
Definition Snapshot.h:36
Stable outer format shared by persistence and cross-process snapshots.
Definition Snapshot.h:46
Handle domain for module-owned authority stores.
Definition Authority.h:19
Explainable result of an authority decision.
Definition Authority.h:41
std::string winningRuleId
Definition Authority.h:44
Deterministically sequenced authority lifecycle event.
Definition Authority.h:53
std::string capability
Definition Authority.h:59
std::string ruleId
Definition Authority.h:56
std::string actor
Definition Authority.h:57
std::string reason
Definition Authority.h:61
std::string scope
Definition Authority.h:58
std::string source
Definition Authority.h:60
One stable authority rule over an opaque actor and scope.
Definition Authority.h:27
std::string scope
Definition Authority.h:30
RuleEffect effect
Definition Authority.h:33
std::string actor
Definition Authority.h:29
std::string capability
Definition Authority.h:31
std::string source
Definition Authority.h:32
Handle plus owner-lifetime epoch for a non-ECS registry object.