implement allOf to allow multiple verbs for one permission condition
This commit is contained in:
@@ -3,26 +3,26 @@ import type { CollectionBulkActionPermissionConditionConfig } from '../../collec
|
||||
import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js';
|
||||
import type { SectionAliasConditionConfig } from './section-alias.condition.js';
|
||||
import type { SwitchConditionConfig } from './switch.condition.js';
|
||||
import type { UserPermissionConditionConfig } from '@umbraco-cms/backoffice/user-permission';
|
||||
import type { BlockWorkspaceHasSettingsConditionConfig } from '@umbraco-cms/backoffice/block';
|
||||
import type {
|
||||
WorkspaceAliasConditionConfig,
|
||||
WorkspaceEntityTypeConditionConfig,
|
||||
} from '@umbraco-cms/backoffice/workspace';
|
||||
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { UmbDocumentUserPermissionConditionConfig } from '@umbraco-cms/backoffice/document';
|
||||
|
||||
/* TODO: in theory should't the core package import from other packages.
|
||||
Are there any other way we can do this?
|
||||
Niels: Sadly I don't see any other solutions currently. But are very open for ideas :-) now that I think about it maybe there is some ability to extend a global type, similar to the 'declare global' trick we use on Elements.
|
||||
*/
|
||||
export type ConditionTypes =
|
||||
| BlockWorkspaceHasSettingsConditionConfig
|
||||
| CollectionAliasConditionConfig
|
||||
| CollectionBulkActionPermissionConditionConfig
|
||||
| SectionAliasConditionConfig
|
||||
| WorkspaceAliasConditionConfig
|
||||
| BlockWorkspaceHasSettingsConditionConfig
|
||||
| WorkspaceEntityTypeConditionConfig
|
||||
| SwitchConditionConfig
|
||||
| UserPermissionConditionConfig
|
||||
| UmbDocumentUserPermissionConditionConfig
|
||||
| UmbSectionUserPermissionConditionConfig
|
||||
| WorkspaceAliasConditionConfig
|
||||
| WorkspaceEntityTypeConditionConfig
|
||||
| UmbConditionConfigBase;
|
||||
|
||||
@@ -18,7 +18,7 @@ const entityActions: Array<ManifestTypes> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_CREATE,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_CREATE],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js';
|
||||
import { UMB_USER_PERMISSION_DOCUMENT_CULTURE_AND_HOSTNAMES } from '../../user-permissions/index.js';
|
||||
import { UmbDocumentCultureAndHostnamesEntityAction } from './culture-and-hostnames.action.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
@@ -18,7 +19,7 @@ const entityActions: Array<ManifestTypes> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_CULTURE_AND_HOSTNAMES,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_CULTURE_AND_HOSTNAMES],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -2,7 +2,12 @@ import { UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js';
|
||||
import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js';
|
||||
import { UMB_DOCUMENT_PICKER_MODAL } from '../modals/index.js';
|
||||
import {
|
||||
UMB_USER_PERMISSION_DOCUMENT_CREATE_BLUEPRINT,
|
||||
UMB_USER_PERMISSION_DOCUMENT_DELETE,
|
||||
UMB_USER_PERMISSION_DOCUMENT_DUPLICATE,
|
||||
UMB_USER_PERMISSION_DOCUMENT_MOVE,
|
||||
UMB_USER_PERMISSION_DOCUMENT_NOTIFICATIONS,
|
||||
UMB_USER_PERMISSION_DOCUMENT_PERMISSIONS,
|
||||
UMB_USER_PERMISSION_DOCUMENT_PUBLISH,
|
||||
UMB_USER_PERMISSION_DOCUMENT_UNPUBLISH,
|
||||
} from '../user-permissions/constants.js';
|
||||
@@ -28,7 +33,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_DELETE,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_DELETE],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -47,7 +52,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_CREATE_BLUEPRINT,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_CREATE_BLUEPRINT],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -66,7 +71,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_MOVE,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_MOVE],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -85,7 +90,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_DUPLICATE,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_DUPLICATE],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -104,7 +109,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_PUBLISH,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_PUBLISH],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -123,7 +128,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_UNPUBLISH,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_UNPUBLISH],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -142,7 +147,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_PERMISSIONS,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_PERMISSIONS],
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -161,7 +166,7 @@ const entityActions: Array<ManifestEntityAction> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_NOTIFICATIONS,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_NOTIFICATIONS],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js';
|
||||
import { UMB_USER_PERMISSION_DOCUMENT_PUBLIC_ACCESS } from '../../user-permissions/index.js';
|
||||
import { UmbDocumentPublicAccessEntityAction } from './public-access.action.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
@@ -18,7 +19,7 @@ const entityActions: Array<ManifestTypes> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_PUBLIC_ACCESS,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_PUBLIC_ACCESS],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { UMB_DOCUMENT_ENTITY_TYPE, UMB_DOCUMENT_ROOT_ENTITY_TYPE } from '../../entity.js';
|
||||
import { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js';
|
||||
import { UMB_DOCUMENT_TREE_REPOSITORY_ALIAS } from '../../tree/index.js';
|
||||
import { UMB_USER_PERMISSION_DOCUMENT_SORT } from '../../user-permissions/index.js';
|
||||
import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './repository/constants.js';
|
||||
import { manifests as repositoryManifests } from './repository/manifests.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
@@ -21,7 +22,7 @@ export const manifests: Array<ManifestTypes> = [
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.UserPermission.Document',
|
||||
match: UMB_USER_PERMISSION_DOCUMENT_SORT,
|
||||
allOf: [UMB_USER_PERMISSION_DOCUMENT_SORT],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { UmbVariantModel, UmbVariantOptionModel, UmbVariantPublishModel } f
|
||||
import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models';
|
||||
import { DocumentVariantStateModel as UmbDocumentVariantState } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
export { UmbDocumentVariantState };
|
||||
export type { UmbDocumentUserPermissionConditionConfig } from './user-permissions/document-user-permission.condition.js';
|
||||
|
||||
export interface UmbDocumentDetailModel {
|
||||
documentType: {
|
||||
|
||||
@@ -58,17 +58,18 @@ export class UmbDocumentUserPermissionCondition
|
||||
if (!this.#entityType) return;
|
||||
if (this.#unique === undefined) return;
|
||||
|
||||
let verbs: Array<string> = [];
|
||||
let verbs: Array<string> = this.#fallbackPermissions;
|
||||
|
||||
if (this.#documentPermissions) {
|
||||
const permissionsForCurrentDocument = this.#documentPermissions.find(
|
||||
(permission) => permission.document.id === this.#unique,
|
||||
);
|
||||
const currentDocumentVerbs = permissionsForCurrentDocument ? permissionsForCurrentDocument.verbs : [];
|
||||
verbs = this.#fallbackPermissions.concat(currentDocumentVerbs);
|
||||
verbs = verbs.concat(currentDocumentVerbs);
|
||||
}
|
||||
|
||||
this.permitted = verbs.includes(this.config.match);
|
||||
const uniqueVerbs = [...new Set(verbs)];
|
||||
this.permitted = this.config.allOf.every((verb) => uniqueVerbs.includes(verb));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,9 +79,9 @@ export type UmbDocumentUserPermissionConditionConfig =
|
||||
*
|
||||
*
|
||||
* @example
|
||||
* "Umb.Document.Create"
|
||||
* ["Umb.Document.Save", "Umb.Document.Publish"]
|
||||
*/
|
||||
match: string;
|
||||
allOf: Array<string>;
|
||||
};
|
||||
|
||||
export const manifest: ManifestCondition = {
|
||||
|
||||
Reference in New Issue
Block a user