protected override OpcAttributeValue <TAttribute> WriteAttributeValueCore <TAttribute>( OpcWriteAttributeValueContext context, OpcAttributeValue <TAttribute> value) { if (!this.manager.CanWrite(this, context.Identity)) { throw new OpcException(OpcStatusCode.BadNotWritable); } return(base.WriteAttributeValueCore(context, value)); }
protected override OpcAttributeValue <TAttribute> ReadAttributeValueCore <TAttribute>( OpcReadAttributeValueContext context, OpcAttributeValue <TAttribute> value) { var attribute = value.Attribute; // By default a user can not longer write to any node/attribute as soon the // OpcRequestType.Write is already denied (see Program.cs). // // To additionally inform the client/user that its access is restricted we shall // provide the according user dependent metadata for the UserAccessLevel and // UserWriteAccess attributes as well. if (attribute == OpcAttribute.UserAccessLevel || attribute == OpcAttribute.UserWriteAccess) { if (!this.manager.CanWrite(this, context.Identity)) { if (value is OpcAttributeValue <OpcAccessLevel> accessLevel) { accessLevel = new OpcAttributeValue <OpcAccessLevel>( value.Attribute, accessLevel.Value & ~OpcAccessLevel.CurrentWrite); return((OpcAttributeValue <TAttribute>)(object) accessLevel); } if (value is OpcAttributeValue <OpcAttributeWriteAccess> writeAccess) { writeAccess = new OpcAttributeValue <OpcAttributeWriteAccess>( value.Attribute, OpcAttributeWriteAccess.None); return((OpcAttributeValue <TAttribute>)(object) writeAccess); } } } return(base.ReadAttributeValueCore(context, value)); }