private bool Validate(object obj, WSParam xParam, JsonWriter writer, JsonSerializer serializer, WSSchema schema, WSSource xSource, WSParamList outFields, ref WSStatus status, WSRequest Request, MetaFunctions CFunc) { try { if (this is WSDynamicEntity && schema == null) { status.CODE = WSStatus.ERROR.CODE; status.AddNote("No schema defined", WSConstants.ACCESS_LEVEL.READ); } else if (xParam == null) { status.CODE = WSStatus.ERROR.CODE; status.AddNote("Undefined parameters are not allowed", WSConstants.ACCESS_LEVEL.READ); } else { bool IsOwner = false;//TODO@ANDVO:2015-09-11 : ADD IsOwner validation check int paramAccessLevel = xParam.READ_ACCESS_MODE.ACCESS_LEVEL; paramAccessLevel = (xSource != null && xSource.AccessLevel > paramAccessLevel) ? xSource.AccessLevel : paramAccessLevel; if (Request.Security.AuthToken.User.role < paramAccessLevel && !IsOwner) { #region ACCESS DENIED HANDLING if (xSource != null && xSource.ShowMessageInaccessible) { string accessNote = "Access denied"; status.CODE = WSStatus.ATTANTION.CODE; status.AddNote(accessNote, WSConstants.ACCESS_LEVEL.READ); WritePropName(writer, xParam.NAME); serializer.Serialize(writer, accessNote); } #endregion } else { if (!WSParamList.IsEmpty(outFields) && !outFields.Any(a => a.Match(schema.Name))) { } else { if (obj == null && !xParam.SkipEmpty) { obj = string.Empty; status.CODE = WSStatus.ATTANTION.CODE; status.AddNote("Can not write NULL to [" + xParam.DISPLAY_NAME + "]. Value set to empty string.", WSConstants.ACCESS_LEVEL.READ); } if (obj != null) { status.AddNote("done", WSConstants.ACCESS_LEVEL.READ); return(true); } } } } } catch (Exception e) { status.CODE = WSStatus.ERROR.CODE; status.AddNote("Error(line" + e.LineNumber() + "- " + e.Message + ")"); CFunc.RegError(GetType(), e, ref status); } return(false); }
public void WriteXml(XmlWriter writer) { try { writer.WriteStartElement(Name); Type type = GetType(); bool writeAllFields = WSParamList.IsEmpty(outFields); foreach (PropertyInfo x in type.GetProperties()) { string xName = x.Name.ToLower(); WSParam xParam = GetParam(x.Name, x.PropertyType); if (xParam != null && role >= xParam.READ_ACCESS_MODE.ACCESS_LEVEL) { if (writeAllFields) { writer.WriteStartElement(xName); WriteXmlValue(x.GetValue(this, null), null, x.PropertyType, writer); writer.WriteEndElement(); } else { WSParam outputParam = outFields.FirstOrDefault(a => a.Match(xName)); if (outputParam != null) { writer.WriteStartElement(xName); WriteXmlValue(x.GetValue(this, null), outputParam, x.PropertyType, writer); writer.WriteEndElement(); } } } } foreach (FieldInfo x in type.GetFields()) { string xName = x.Name.ToLower(); WSParam xParam = GetParam(x.Name, x.FieldType); if (xParam != null && role >= xParam.READ_ACCESS_MODE.ACCESS_LEVEL) { if (writeAllFields) { writer.WriteStartElement(xName); WriteXmlValue(x.GetValue(this), null, x.FieldType, writer); writer.WriteEndElement(); } else { WSParam outputParam = outFields.FirstOrDefault(a => a.Match(xName)); if (outputParam != null) { writer.WriteStartElement(xName); WriteXmlValue(x.GetValue(this), outputParam, x.FieldType, writer); writer.WriteEndElement(); } } } } writer.WriteEndElement(); } catch (Exception e) { WSStatus status = WSStatus.NONE.clone(); CFunc.RegError(GetType(), e, ref status); } }