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 +}