using System; using System.Collections.Generic; namespace StellaOps.Auth.Abstractions; /// /// Canonical scope names supported by StellaOps services. /// public static class StellaOpsScopes { /// /// Scope required to trigger Concelier jobs. /// public const string ConcelierJobsTrigger = "concelier.jobs.trigger"; /// /// Scope required to manage Concelier merge operations. /// public const string ConcelierMerge = "concelier.merge"; /// /// Scope granting administrative access to Authority user management. /// public const string AuthorityUsersManage = "authority.users.manage"; /// /// Scope granting administrative access to Authority client registrations. /// public const string AuthorityClientsManage = "authority.clients.manage"; /// /// Scope granting read-only access to Authority audit logs. /// public const string AuthorityAuditRead = "authority.audit.read"; /// /// Synthetic scope representing trusted network bypass. /// public const string Bypass = "stellaops.bypass"; /// /// Scope granting read-only access to console UX features. /// public const string UiRead = "ui.read"; /// /// Scope granting permission to approve exceptions. /// public const string ExceptionsApprove = "exceptions:approve"; /// /// Scope granting read-only access to raw advisory ingestion data. /// public const string AdvisoryRead = "advisory:read"; /// /// Scope granting write access for raw advisory ingestion. /// public const string AdvisoryIngest = "advisory:ingest"; /// /// Scope granting read-only access to raw VEX ingestion data. /// public const string VexRead = "vex:read"; /// /// Scope granting write access for raw VEX ingestion. /// public const string VexIngest = "vex:ingest"; /// /// Scope granting permission to execute aggregation-only contract verification. /// public const string AocVerify = "aoc:verify"; /// /// Scope granting read-only access to reachability signals. /// public const string SignalsRead = "signals:read"; /// /// Scope granting permission to write reachability signals. /// public const string SignalsWrite = "signals:write"; /// /// Scope granting administrative access to reachability signal ingestion. /// public const string SignalsAdmin = "signals:admin"; /// /// Scope granting permission to create or edit policy drafts. /// public const string PolicyWrite = "policy:write"; /// /// Scope granting permission to author Policy Studio workspaces. /// public const string PolicyAuthor = "policy:author"; /// /// Scope granting permission to edit policy configurations. /// public const string PolicyEdit = "policy:edit"; /// /// Scope granting read-only access to policy metadata. /// public const string PolicyRead = "policy:read"; /// /// Scope granting permission to review Policy Studio drafts. /// public const string PolicyReview = "policy:review"; /// /// Scope granting permission to submit drafts for review. /// public const string PolicySubmit = "policy:submit"; /// /// Scope granting permission to approve or reject policies. /// public const string PolicyApprove = "policy:approve"; /// /// Scope granting permission to operate Policy Studio promotions and runs. /// public const string PolicyOperate = "policy:operate"; /// /// Scope granting permission to audit Policy Studio activity. /// public const string PolicyAudit = "policy:audit"; /// /// Scope granting permission to trigger policy runs and activation workflows. /// public const string PolicyRun = "policy:run"; /// /// Scope granting permission to activate policies. /// public const string PolicyActivate = "policy:activate"; /// /// Scope granting read-only access to effective findings materialised by Policy Engine. /// public const string FindingsRead = "findings:read"; /// /// Scope granting permission to run Policy Studio simulations. /// public const string PolicySimulate = "policy:simulate"; /// /// Scope granted to Policy Engine service identity for writing effective findings. /// public const string EffectiveWrite = "effective:write"; /// /// Scope granting read-only access to graph queries and overlays. /// public const string GraphRead = "graph:read"; /// /// Scope granting read-only access to Vuln Explorer resources and permalinks. /// public const string VulnRead = "vuln:read"; /// /// Scope granting read-only access to export center runs and bundles. /// public const string ExportViewer = "export.viewer"; /// /// Scope granting permission to operate export center scheduling and run execution. /// public const string ExportOperator = "export.operator"; /// /// Scope granting administrative control over export center retention, encryption keys, and scheduling policies. /// public const string ExportAdmin = "export.admin"; /// /// Scope granting permission to enqueue or mutate graph build jobs. /// public const string GraphWrite = "graph:write"; /// /// Scope granting permission to export graph artefacts (GraphML/JSONL/etc.). /// public const string GraphExport = "graph:export"; /// /// Scope granting permission to trigger what-if simulations on graphs. /// public const string GraphSimulate = "graph:simulate"; /// /// Scope granting read-only access to Orchestrator job state and telemetry. /// public const string OrchRead = "orch:read"; /// /// Scope granting permission to execute Orchestrator control actions. /// public const string OrchOperate = "orch:operate"; /// /// Scope granting read-only access to Authority tenant catalog APIs. /// public const string AuthorityTenantsRead = "authority:tenants.read"; private static readonly HashSet KnownScopes = new(StringComparer.OrdinalIgnoreCase) { ConcelierJobsTrigger, ConcelierMerge, AuthorityUsersManage, AuthorityClientsManage, AuthorityAuditRead, Bypass, UiRead, ExceptionsApprove, AdvisoryRead, AdvisoryIngest, VexRead, VexIngest, AocVerify, SignalsRead, SignalsWrite, SignalsAdmin, PolicyWrite, PolicyAuthor, PolicyEdit, PolicyRead, PolicyReview, PolicySubmit, PolicyApprove, PolicyOperate, PolicyAudit, PolicyRun, PolicyActivate, PolicySimulate, FindingsRead, EffectiveWrite, GraphRead, VulnRead, ExportViewer, ExportOperator, ExportAdmin, GraphWrite, GraphExport, GraphSimulate, OrchRead, OrchOperate, AuthorityTenantsRead }; /// /// Normalises a scope string (trim/convert to lower case). /// /// Scope raw value. /// Normalised scope or null when the input is blank. public static string? Normalize(string? scope) { if (string.IsNullOrWhiteSpace(scope)) { return null; } return scope.Trim().ToLowerInvariant(); } /// /// Checks whether the provided scope is registered as a built-in StellaOps scope. /// public static bool IsKnown(string scope) { ArgumentNullException.ThrowIfNull(scope); return KnownScopes.Contains(scope); } /// /// Returns the full set of built-in scopes. /// public static IReadOnlyCollection All => KnownScopes; }