diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor
index 47928dde..c541f38d 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/AclEdit.razor
@@ -31,32 +31,6 @@ else if (!IsNew && _existing is null)
}
else
{
-
- What this grant does depends on Security:Acl:Enabled on the
- node serving the data. That is per-node configuration, so this page cannot tell you
- which mode a given node is in — check the node's own settings.
-
- With it on: the scope is honoured, and the scoped decision replaces the
- server-wide role rather than adding to it. Every data-plane operation is gated —
- Read, Browse,
- Subscribe, WriteOperate,
- HistoryRead and the alarm methods, which separate into
- AlarmAcknowledge / AlarmConfirm /
- AlarmShelve. So a grant that omits Read
- denies reads, and one that omits Browse hides the node from navigation.
- Granting Browse on a node also makes the folders above it
- browsable — otherwise the grant could never be navigated to — so it reveals their names.
- Revoking this grant stops any live subscription it was authorizing, on the next deployment.
-
- With it off (the default): only a Cluster-scoped grant
- does anything, and it confers a server-wide role on its principal —
- WriteOperate → writing any tag value;
- AlarmAcknowledge → the Part 9 alarm methods. Any narrower scope is
- stored and shipped but confers nothing. That under-granting is deliberate:
- honouring a grant's flags while its scope cannot be honoured would turn "WriteOperate on
- one equipment" into server-wide write authority.
-
- What these grants do depends on
- Security:Acl:Enabled on the node serving the data.
- That is per-node configuration, so this page cannot tell you which mode a given node is in —
- check the node's own settings.
-
- With it on: every scope kind is honoured, and the scoped decision
- replaces the server-wide role rather than adding to it — so a narrow grant works, and a
- Cluster-scoped one no longer confers authority beyond that cluster.
- Every data-plane operation is gated — Read,
- Browse, Subscribe,
- WriteOperate, HistoryRead and the alarm
- methods, which separate into AlarmAcknowledge /
- AlarmConfirm / AlarmShelve. A principal with
- no grant at all can connect and see nothing.
-
- With it off (the default): only Cluster-scoped grants
- do anything, and they confer a server-wide role on their principal —
- WriteOperate → writing any tag value;
- AlarmAcknowledge → the Part 9 alarm methods
- (acknowledge / confirm / shelve). Narrower grants are saved and shipped in every deployment
- artifact but confer nothing. That under-granting is deliberate: honouring such
- a grant's flags while its scope cannot be honoured would turn "WriteOperate on one
- equipment" into server-wide write authority.
-
- A node that merely leads to something you may browse stays browsable, or a narrow grant
- could never be navigated to — so granting Browse deep in the tree also
- reveals the names of the folders above it. Revoking a grant stops live subscriptions on the next
- deployment, not just future requests.
-
- Identity is an API key, not LDAP: a client presents an OPC UA UserName token
- with username apikey and password
- otua_<keyId>_<secret>, and the key resolves to the
- principal named on these rows. Mint keys on the /apikeys page; LDAP
- now covers AdminUI login only. See docs/security.md.
-
-
- ACL rows grant principals specific NodePermissions on a scope
- (the cluster, a namespace, an area, an equipment, a raw device, a tag). A principal is an API
- key's principal, or the reserved anonymous principal that an
- anonymous session authenticates as.
-
The Scope target column resolves each row against the current configuration. A
row marked unresolved points at nothing — it is shipped in
every deployment artifact but authorizes nobody, and the deploy gate rejects it. Open it and
@@ -75,10 +33,7 @@ else
@if (_rows.Count == 0)
{
- No ACL rows for this cluster. With Security:Acl:Enabled off, that
- means writes and alarm acknowledges are refused while reads, browses, subscriptions and
- history reads stay open to any admitted session. With it on, it means
- every data-plane operation is refused here — a client can connect and see nothing.
+ No ACL rows for this cluster.
}
else
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
index 84e4f849..7ae6baa5 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterAudit.razor
@@ -20,9 +20,7 @@
else
{
- Latest @PageSize audit rows scoped to this cluster, newest first. EventId/CorrelationId
- columns (F3) make cross-restart deduplication possible — Akka actors that retry an apply
- won't insert duplicate rows. Details JSON is shown verbatim.
+ Latest @PageSize audit rows scoped to this cluster, newest first. Details JSON is shown verbatim.
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor
index 5f1fa180..6aa69f5f 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterEdit.razor
@@ -86,15 +86,17 @@ else
@if (!string.IsNullOrWhiteSpace(_error))
{
-
The Namespace entity has been removed. The v3 Raw/UNS split replaces it —
raw driver folders and the unified namespace are managed on the /raw and
- /uns pages, arriving in v3 Batch 2/3. This page is a placeholder so existing
- links do not 404.
+ /uns pages. This page is a placeholder so existing links do not 404.
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
index 7f1741f8..9e11a1c9 100644
--- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/ClusterRedundancy.razor
@@ -34,15 +34,6 @@ else
-
- v2 redundancy is computed at runtime by RedundancyStateActor
- on each admin node. The values below are the static configuration; the resolved live
- ServiceLevel for each peer is broadcast on the
- redundancy-state DPS topic and consumed by the OPC UA host's
- ServerStatus publisher. See
- docs/v2/Architecture-v2.md.
-
-
Cluster redundancy
@@ -68,10 +59,7 @@ else
- Read live from cluster state on this node. The Primary shown is
- this application Cluster's own Primary — since
- the per-cluster mesh split, each cluster's redundant pair runs its own independent 2-node
- Akka mesh and elects its own Primary. See docs/Redundancy.md.
+ Read live from cluster state on this node.
@@ -98,8 +86,10 @@ else
Its peer becomes Primary and advertises ServiceLevel 250.
Connected OPC UA clients re-select the new Primary.
The Namespace entity has been removed. The v3 Raw/UNS split replaces it —
raw driver folders and the unified namespace are managed on the /raw and
- /uns pages, arriving in v3 Batch 2/3. This editor no longer applies.
+ /uns pages. This editor no longer applies.