载入中...
搜索中...
未找到
EditorPluginPermissions.cpp
浏览该文件的文档.
15 return EditorValue::Object{{"id", grant.id.value()}, {"plugin", grant.plugin}, {"capability", grant.capability},
25 static const std::set<std::string> capabilities{"filesystem.read", "filesystem.write", "network.connect",
28 if (!id || id->empty() || !plugin || plugin->empty() || !capability || !capabilities.contains(*capability) ||
29 !scope || scope->empty() || !decision || !decisions.contains(*decision) || *scope == "*" || *scope == "/")
33 return eve::editing::applied<PluginPermissionGrant>({StableId(*id), *plugin, *capability, *scope, *decision});
35DomainOperation operation(const char* type, const char* inverseType, const std::string& target, EditorValue payload,
39 result.payload = std::move(payload); result.inverse = std::move(inverse); result.hasInverse = true;
58 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.plugins.permission-target"),
66 return eve::editing::failed<void>(EditorStatus::Conflict, RuleId("editor.plugins.duplicate-permission"),
72 return eve::editing::failed<void>(EditorStatus::NotFound, RuleId("editor.plugins.permission-not-found"),
75 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.plugins.permission-operation"),
85Result<void> PluginPermissionTarget::commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) {
88 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.plugins.permission-staging"),
98Result<DomainOperation> PluginPermissionTarget::makeSet(const PluginPermissionGrant& grant) const {
102 if (id != grant.id && current.plugin == grant.plugin && current.capability == grant.capability &&
109 "plugin.permission.set.v1", found == grants_.end() ? "plugin.permission.remove.v1" : "plugin.permission.set.v1",
110 id_, grantValue(grant), found == grants_.end() ? EditorValue(grant.id.value()) : grantValue(found->second),
117 EditorStatus::NotFound, RuleId("editor.plugins.permission-not-found"), "Permission grant was not found");
118 return eve::editing::applied<DomainOperation>(operation("plugin.permission.remove.v1", "plugin.permission.set.v1",
121std::string PluginPermissionTarget::decision(const std::string& plugin, const std::string& capability,
125 if (grant.plugin == plugin && grant.capability == capability && grant.scope == scope) return grant.decision;
135 const auto *versionEntry = field(snapshot, "schemaVersion"), *grantsEntry = field(snapshot, "grants");
139 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.plugins.permission-snapshot"),
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
const std::string & value() const noexcept
Returns the exact legacy or canonical compatibility spelling.
Definition Identity.h:362
void bumpRevision()
Advance the revision without touching the dirty region.
Definition EditableTarget.h:179
Revision revisionValue() const noexcept
Return the revision as the shared protocol revision type.
Definition EditableTarget.h:169
void widenDirty()
Mark an unknown area dirty without advancing the revision.
Definition EditableTarget.h:177
eve::OptionalRef< C > capability()
Query a capability through its interface-owned stable identity.
Definition EditableTarget.h:82
Deterministic owning value tree shared by authoring hosts.
Definition EditingValue.h:19
Revisioned plugin permission policy with reversible, auditable grants.
Definition EditorPluginPermissions.h:28
Result< void > loadSnapshot(const EditorValue &snapshot)
Atomically load a validated permission policy.
Definition EditorPluginPermissions.cpp:134
void * queryCapability(const CapabilityId &capability) override
Query an optional target capability.
Definition EditorPluginPermissions.cpp:53
EditorValue snapshotValue() const
Capture deterministic permission policy.
Definition EditorPluginPermissions.cpp:129
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
Definition EditorPluginPermissions.cpp:85
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition EditorPluginPermissions.cpp:82
std::string decision(const std::string &plugin, const std::string &capability, const std::string &scope) const
Resolve exact plugin/capability/scope policy, defaulting to ask.
Definition EditorPluginPermissions.cpp:121
PluginPermissionTarget(std::string id)
Plugin permission target.
Definition EditorPluginPermissions.cpp:45
Result< DomainOperation > makeSet(const PluginPermissionGrant &grant) const
Plan creation or replacement after least-privilege validation.
Definition EditorPluginPermissions.cpp:98
std::vector< PluginPermissionGrant > grants() const
Enumerate grants in stable-id order.
Definition EditorPluginPermissions.cpp:93
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition EditorPluginPermissions.cpp:56
Result< DomainOperation > makeRemove(const StableId &id) const
Plan grant removal.
Definition EditorPluginPermissions.cpp:113
Definition ActionPreviewController.cpp:6
eve::editing::Value EditorValue
Compatibility alias for the UI-independent authoring value tree.
Definition EditorValue.h:8
eve::editing::DomainOperation DomainOperation
Definition EditorProtocol.h:12
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
Definition Container.h:602
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39
Explicit project-owned permission decision for one plugin capability scope.
Definition EditorPluginPermissions.h:16
std::string capability
Definition EditorPluginPermissions.h:19