allow for both allOf and oneOf in the condition
This commit is contained in:
@@ -82,19 +82,40 @@ export class UmbDocumentUserPermissionCondition
|
|||||||
}
|
}
|
||||||
|
|
||||||
#check(verbs: Array<string>) {
|
#check(verbs: Array<string>) {
|
||||||
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 =
|
export type UmbDocumentUserPermissionConditionConfig =
|
||||||
UmbConditionConfigBase<'Umb.Condition.UserPermission.Document'> & {
|
UmbConditionConfigBase<'Umb.Condition.UserPermission.Document'> & {
|
||||||
/**
|
/**
|
||||||
*
|
* The user must have all of the permissions in this array for the condition to be met.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* ["Umb.Document.Save", "Umb.Document.Publish"]
|
* ["Umb.Document.Save", "Umb.Document.Publish"]
|
||||||
*/
|
*/
|
||||||
allOf: Array<string>;
|
allOf?: Array<string>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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<string>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const manifest: ManifestCondition = {
|
export const manifest: ManifestCondition = {
|
||||||
|
|||||||
@@ -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 { UmbDocumentUserPermissionCondition } from '../../user-permissions/document-user-permission.condition.js';
|
||||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||||
import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace';
|
import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace';
|
||||||
@@ -15,7 +18,7 @@ export class UmbDocumentSaveWorkspaceAction extends UmbSubmitWorkspaceAction {
|
|||||||
host,
|
host,
|
||||||
config: {
|
config: {
|
||||||
alias: 'Umb.Condition.UserPermission.Document',
|
alias: 'Umb.Condition.UserPermission.Document',
|
||||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_UPDATE],
|
oneOf: [UMB_USER_PERMISSION_DOCUMENT_CREATE, UMB_USER_PERMISSION_DOCUMENT_UPDATE],
|
||||||
},
|
},
|
||||||
onChange: () => {
|
onChange: () => {
|
||||||
condition.permitted ? this.enable() : this.disable();
|
condition.permitted ? this.enable() : this.disable();
|
||||||
|
|||||||
Reference in New Issue
Block a user