diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-user-permission.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-user-permission.condition.ts index 9114748e2f..5c83f3e25d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-user-permission.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-user-permission.condition.ts @@ -82,19 +82,40 @@ export class UmbDocumentUserPermissionCondition } #check(verbs: Array) { - this.permitted = this.config.allOf.every((verb) => verbs.includes(verb)); + /* we default to true se we don't require both allOf and oneOf to be defined + but they can be combined for more complex scenarios */ + let allOfPermitted = true; + let oneOfPermitted = true; + + if (this.config.allOf?.length) { + allOfPermitted = this.config.allOf.every((verb) => verbs.includes(verb)); + } + + if (this.config.oneOf?.length) { + oneOfPermitted = this.config.oneOf.some((verb) => verbs.includes(verb)); + } + + this.permitted = allOfPermitted && oneOfPermitted; } } export type UmbDocumentUserPermissionConditionConfig = UmbConditionConfigBase<'Umb.Condition.UserPermission.Document'> & { /** - * + * The user must have all of the permissions in this array for the condition to be met. * * @example * ["Umb.Document.Save", "Umb.Document.Publish"] */ - allOf: Array; + allOf?: Array; + + /** + * The user must have at least one of the permissions in this array for the condition to be met. + * + * @example + * ["Umb.Document.Save", "Umb.Document.Publish"] + */ + oneOf?: Array; }; export const manifest: ManifestCondition = { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts index d72a6668a2..f49852254f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts @@ -1,4 +1,7 @@ -import { UMB_USER_PERMISSION_DOCUMENT_UPDATE } from '../../user-permissions/constants.js'; +import { + UMB_USER_PERMISSION_DOCUMENT_CREATE, + UMB_USER_PERMISSION_DOCUMENT_UPDATE, +} from '../../user-permissions/constants.js'; import { UmbDocumentUserPermissionCondition } from '../../user-permissions/document-user-permission.condition.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -15,7 +18,7 @@ export class UmbDocumentSaveWorkspaceAction extends UmbSubmitWorkspaceAction { host, config: { alias: 'Umb.Condition.UserPermission.Document', - allOf: [UMB_USER_PERMISSION_DOCUMENT_UPDATE], + oneOf: [UMB_USER_PERMISSION_DOCUMENT_CREATE, UMB_USER_PERMISSION_DOCUMENT_UPDATE], }, onChange: () => { condition.permitted ? this.enable() : this.disable();