diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs
index c4a3d7791b..c9ac6b2847 100644
--- a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs
+++ b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyBasic.cs
@@ -68,4 +68,11 @@ public class ContentPropertyBasic
///
[IgnoreDataMember]
public IDataEditor? PropertyEditor { get; set; }
+
+ ///
+ /// Used internally during model mapping
+ ///
+ [DataMember(Name = "supportsReadOnly")]
+ [ReadOnly(true)]
+ public bool SupportsReadOnly { get; set; }
}
diff --git a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs
index 5ca8a7ad86..ca8c2f1fc2 100644
--- a/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs
+++ b/src/Umbraco.Core/Models/ContentEditing/ContentPropertyDisplay.cs
@@ -40,7 +40,4 @@ public class ContentPropertyDisplay : ContentPropertyBasic
[DataMember(Name = "readonly")]
public bool Readonly { get; set; }
-
- [DataMember(Name = "supportsReadOnly")]
- public bool SupportsReadOnly { get; set; }
}
diff --git a/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs b/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs
index d3502cf887..9cda25fbbb 100644
--- a/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs
+++ b/src/Umbraco.Core/Models/Mapping/ContentPropertyBasicMapper.cs
@@ -59,6 +59,7 @@ internal class ContentPropertyBasicMapper
dest.Alias = property.Alias;
dest.PropertyEditor = editor;
dest.Editor = editor.Alias;
+ dest.SupportsReadOnly = editor.SupportsReadOnly;
dest.DataTypeKey = property.PropertyType!.DataTypeKey;
// if there's a set of property aliases specified, we will check if the current property's value should be mapped.
diff --git a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
index 6b0556d455..ae9876628f 100644
--- a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
+++ b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
@@ -117,8 +117,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper
prop.IsSensitive = true;
// mark this property as readonly so that it does not post any data
prop.Readonly = true;
- // this is readonly so support read-only mode
- prop.SupportsReadOnly = true;
// replace this editor with a sensitive value
prop.View = "sensitivevalue";
// clear the value
@@ -235,7 +233,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper
View = "boolean",
IsSensitive = true,
Readonly = false,
- SupportsReadOnly = true,
},
new()
@@ -246,7 +243,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper
View = "boolean",
IsSensitive = true,
Readonly = !member.IsLockedOut, // IMember.IsLockedOut can't be set to true, so make it readonly when that's the case (you can only unlock)
- SupportsReadOnly = true,
},
new()
@@ -287,7 +283,6 @@ public class MemberTabsAndPropertiesMapper : TabsAndPropertiesMapper
property.Value = null;
property.View = "sensitivevalue";
property.Readonly = true;
- property.SupportsReadOnly = true;
}
}
}
diff --git a/src/Umbraco.Core/PropertyEditors/DataEditor.cs b/src/Umbraco.Core/PropertyEditors/DataEditor.cs
index 115b6a2371..b2b95f475b 100644
--- a/src/Umbraco.Core/PropertyEditors/DataEditor.cs
+++ b/src/Umbraco.Core/PropertyEditors/DataEditor.cs
@@ -75,6 +75,10 @@ public class DataEditor : IDataEditor
[DataMember(Name = "alias", IsRequired = true)]
public string Alias { get; set; }
+ ///
+ [DataMember(Name = "supportsReadOnly", IsRequired = true)]
+ public bool SupportsReadOnly { get; set; }
+
///
[IgnoreDataMember]
public EditorType Type { get; }
diff --git a/src/Umbraco.Core/PropertyEditors/IDataEditor.cs b/src/Umbraco.Core/PropertyEditors/IDataEditor.cs
index 6f72f29cf3..0569f8ab9a 100644
--- a/src/Umbraco.Core/PropertyEditors/IDataEditor.cs
+++ b/src/Umbraco.Core/PropertyEditors/IDataEditor.cs
@@ -14,6 +14,8 @@ public interface IDataEditor : IDiscoverable
///
string Alias { get; }
+ bool SupportsReadOnly => false;
+
///
/// Gets the type of the editor.
///
diff --git a/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs
index 5d160198c9..4f81bf410a 100644
--- a/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs
+++ b/src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs
@@ -43,6 +43,7 @@ public class TextboxPropertyEditor : DataEditor
{
_ioHelper = ioHelper;
_editorConfigurationParser = editorConfigurationParser;
+ SupportsReadOnly = true;
}
///