diff --git a/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs b/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs index ce838375f6..3792d166bc 100644 --- a/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs +++ b/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs @@ -1139,47 +1139,7 @@ namespace Opc.Ua.Server metadata.UserRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(values[12])); } - // check if NamespaceMetadata is defined for NamespaceUri - string namespaceUri = Server.NamespaceUris.GetString(target.NodeId.NamespaceIndex); - NamespaceMetadataState namespaceMetadataState = Server.NodeManager.ConfigurationNodeManager.GetNamespaceMetadataState(namespaceUri); - - if (namespaceMetadataState != null) - { - List namespaceMetadataValues; - - if (namespaceMetadataState.DefaultAccessRestrictions != null) - { - // get DefaultAccessRestrictions for Namespace - namespaceMetadataValues = namespaceMetadataState.DefaultAccessRestrictions.ReadAttributes(systemContext, Attributes.Value); - - if (namespaceMetadataValues[0] != null) - { - metadata.DefaultAccessRestrictions = (AccessRestrictionType)Enum.ToObject(typeof(AccessRestrictionType), namespaceMetadataValues[0]); - } - } - - if (namespaceMetadataState.DefaultRolePermissions != null) - { - // get DefaultRolePermissions for Namespace - namespaceMetadataValues = namespaceMetadataState.DefaultRolePermissions.ReadAttributes(systemContext, Attributes.Value); - - if (namespaceMetadataValues[0] != null) - { - metadata.DefaultRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); - } - } - - if (namespaceMetadataState.DefaultUserRolePermissions != null) - { - // get DefaultUserRolePermissions for Namespace - namespaceMetadataValues = namespaceMetadataState.DefaultUserRolePermissions.ReadAttributes(systemContext, Attributes.Value); - - if (namespaceMetadataValues[0] != null) - { - metadata.DefaultUserRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); - } - } - } + SetDefaultPermissions(systemContext, target, metadata); // get instance references. BaseInstanceState instance = target as BaseInstanceState; @@ -4424,10 +4384,64 @@ namespace Opc.Ua.Server values = ReadValidationAttributes(systemContext, target); SetAccessAndRolePermissions(values, metadata); } - + + SetDefaultPermissions(systemContext, target, metadata); + return metadata; } } + + + /// + /// Set the metadata default permission values for DefaultAccessRestrictions, DefaultRolePermissions and DefaultUserRolePermissions + /// + /// + /// + /// + private void SetDefaultPermissions(ServerSystemContext systemContext, NodeState target, NodeMetadata metadata) + { + // check if NamespaceMetadata is defined for NamespaceUri + string namespaceUri = Server.NamespaceUris.GetString(target.NodeId.NamespaceIndex); + NamespaceMetadataState namespaceMetadataState = Server.NodeManager.ConfigurationNodeManager.GetNamespaceMetadataState(namespaceUri); + + if (namespaceMetadataState != null) + { + List namespaceMetadataValues; + + if (namespaceMetadataState.DefaultAccessRestrictions != null) + { + // get DefaultAccessRestrictions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultAccessRestrictions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultAccessRestrictions = (AccessRestrictionType)Enum.ToObject(typeof(AccessRestrictionType), namespaceMetadataValues[0]); + } + } + + if (namespaceMetadataState.DefaultRolePermissions != null) + { + // get DefaultRolePermissions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultRolePermissions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); + } + } + + if (namespaceMetadataState.DefaultUserRolePermissions != null) + { + // get DefaultUserRolePermissions for Namespace + namespaceMetadataValues = namespaceMetadataState.DefaultUserRolePermissions.ReadAttributes(systemContext, Attributes.Value); + + if (namespaceMetadataValues[0] != null) + { + metadata.DefaultUserRolePermissions = new RolePermissionTypeCollection(ExtensionObject.ToList(namespaceMetadataValues[0])); + } + } + } + } #endregion #region ComponentCache Functions diff --git a/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs b/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs index 4f97c87fdd..ebfdfc5b79 100644 --- a/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs +++ b/Libraries/Opc.Ua.Server/NodeManager/MasterNodeManager.cs @@ -802,7 +802,7 @@ namespace Opc.Ua.Server } } // validate access rights and role permissions - ServiceResult serviceResult = ValidatePermissions(context, nodeManager, sourceHandle, PermissionType.Browse); + ServiceResult serviceResult = ValidatePermissions(context, nodeManager, sourceHandle, PermissionType.Browse, null, true); if (ServiceResult.IsGood(serviceResult)) { // translate path only if validation is passing