diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
index 1cee9cd14a..15cef77ca3 100644
--- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
+++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
@@ -319,6 +319,7 @@
Create new
Paste from clipboard
This item is in the Recycle Bin
+ Save is not allowed
%0%]]>
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js
index bfde6afbe3..812a461aee 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.controller.js
@@ -17,11 +17,17 @@
$scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected
}
+ function allowUpdate (variant) {
+ return variant.allowedActions.includes("A");
+ }
+
function saveableVariantFilter(variant) {
//determine a variant is 'dirty' (meaning it will show up as save-able) if it's
// * the active one
// * it's editor is in a $dirty state
- return (variant.active || variant.isDirty);
+ // the editor has update permissions for the variant
+ variant.notAllowed = allowUpdate(variant) === false && variant.active;
+ return ((variant.active || variant.isDirty) && (allowUpdate(variant) || variant.active));
}
function isMandatoryFilter(variant) {
@@ -72,7 +78,7 @@
variant.save = variant.publish = false;
variant.isMandatory = isMandatoryFilter(variant);
- if(vm.isNew && hasAnyData(variant)){
+ if(vm.isNew && hasAnyData(variant) && allowUpdate(variant)) {
variant.save = true;
}
});
@@ -81,7 +87,7 @@
//ensure that the current one is selected
var active = vm.variants.find(v => v.active);
- if (active) {
+ if (active && allowUpdate(active)) {
active.save = true;
}
@@ -97,10 +103,11 @@
onInit();
- //when this dialog is closed, reset all 'save' flags
+ //when this dialog is closed, reset all 'save' and 'notAllowed' flags
$scope.$on('$destroy', () => {
vm.variants.forEach(variant => {
variant.save = false;
+ variant.notAllowed = false;
});
});
diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html
index df6332e5be..9153ae1650 100644
--- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html
+++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/save.html
@@ -24,9 +24,8 @@
name="saveVariantSelector"
model="variant.save"
on-change="vm.changeSelection(variant)"
- server-validation-field="{{variant.htmlId}}">
-
-
+ server-validation-field="{{variant.htmlId}}"
+ disabled="variant.notAllowed">
@@ -40,6 +39,10 @@
-
Mandatory
+ -
+
+
+
{{saveVariantSelectorForm.saveVariantSelector.errorMsg}}
@@ -49,7 +52,7 @@
-
+