diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
index 714b95d873..dddf99b84f 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
@@ -304,14 +304,14 @@
_.each(tab.properties, function (prop) {
//don't include the custom generic tab properties
- if (!prop.alias.startsWith("_umb_")) {
+ //don't include a property that is marked readonly
+ if (!prop.alias.startsWith("_umb_") && !prop.readonly) {
saveModel.properties.push({
id: prop.id,
alias: prop.alias,
value: prop.value
});
}
-
});
});
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/sensitivevalue/sensitivevalue.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/sensitivevalue/sensitivevalue.html
index 234ee4548e..6460d882b2 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/sensitivevalue/sensitivevalue.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/sensitivevalue/sensitivevalue.html
@@ -1,3 +1,5 @@
- {{model.value}}
+
+ Hide this property value from content editors that don't have access to view sensitive information
+
diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentPropertyDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/ContentPropertyDisplay.cs
index 14793ace5e..8a09c62333 100644
--- a/src/Umbraco.Web/Models/ContentEditing/ContentPropertyDisplay.cs
+++ b/src/Umbraco.Web/Models/ContentEditing/ContentPropertyDisplay.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "validation")]
public PropertyTypeValidation Validation { get; set; }
- [DataMember(Name = "isSensitiveData")]
- public bool IsSensitive { get; set; }
+ [DataMember(Name = "readonly")]
+ public bool Readonly { get; set; }
}
}
diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
index 6fdf32bcb4..21cf4d1ec1 100644
--- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs
@@ -390,14 +390,17 @@ namespace Umbraco.Web.Models.Mapping
//now update the IsSensitive value
foreach (var prop in result)
{
- prop.IsSensitive = memberType.IsSensitiveProperty(prop.Alias);
+ //check if this property is flagged as sensitive
+ var isSensitiveProperty = memberType.IsSensitiveProperty(prop.Alias);
//check permissions for viewing sensitive data
- if (prop.IsSensitive && umbracoContext.Security.CurrentUser.HasAccessToSensitiveData() == false)
+ if (isSensitiveProperty && umbracoContext.Security.CurrentUser.HasAccessToSensitiveData() == false)
{
+ //mark this property as readonly so that it does not post any data
+ prop.Readonly = true;
//replace this editor with a sensitivevalue
prop.View = "sensitivevalue";
- //replace the value
- prop.Value = _localizedTextService.Localize("content/isSensitiveValue");
+ //clear the value
+ prop.Value = null;
}
}
return result;
diff --git a/src/Umbraco.Web/WebApi/Filters/ContentItemValidationHelper.cs b/src/Umbraco.Web/WebApi/Filters/ContentItemValidationHelper.cs
index 88eda3c64e..2103aa1ee8 100644
--- a/src/Umbraco.Web/WebApi/Filters/ContentItemValidationHelper.cs
+++ b/src/Umbraco.Web/WebApi/Filters/ContentItemValidationHelper.cs
@@ -125,8 +125,12 @@ namespace Umbraco.Web.WebApi.Filters
continue;
}
- //get the posted value for this property
- var postedValue = postedItem.Properties.Single(x => x.Alias == p.Alias).Value;
+ //get the posted value for this property, this may be null in cases where the property was marked as readonly which means
+ //the angular app will not post that value.
+ var postedProp = postedItem.Properties.FirstOrDefault(x => x.Alias == p.Alias);
+ if (postedProp == null) continue;
+
+ var postedValue = postedProp.Value;
//get the pre-values for this property
var preValues = p.PreValues;
@@ -180,4 +184,4 @@ namespace Umbraco.Web.WebApi.Filters
}
-}
\ No newline at end of file
+}