Merge pull request #2293 from umbraco/v15/feature/emm-user-permission-conditions

Move User Permission Conditions
This commit is contained in:
Niels Lyngsø
2024-09-13 20:36:11 +02:00
committed by GitHub
16 changed files with 65 additions and 60 deletions

View File

@@ -1,21 +1,17 @@
import type { CollectionAliasConditionConfig } from '../../collection/collection-alias.manifest.js';
import type { CollectionBulkActionPermissionConditionConfig } from '../../collection/collection-bulk-action-permission.manifest.js';
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 { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js';
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
import type { UmbDocumentUserPermissionConditionConfig } from '@umbraco-cms/backoffice/document';
export type ConditionTypes =
| CollectionAliasConditionConfig
| CollectionBulkActionPermissionConditionConfig
| SectionAliasConditionConfig
| SwitchConditionConfig
| UmbConditionConfigBase
| UmbDocumentUserPermissionConditionConfig
| UmbMultipleAppLanguageConditionConfig
| UmbSectionUserPermissionConditionConfig;
| UmbConditionConfigBase;
type UnionOfProperties<T> = T extends object ? T[keyof T] : never;

View File

@@ -1,10 +1,7 @@
import type { UmbSectionUserPermissionConditionConfig } from './types.js';
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type {
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition,
} from '@umbraco-cms/backoffice/extension-api';
import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
export class UmbSectionUserPermissionCondition extends UmbControllerBase implements UmbExtensionCondition {
@@ -31,12 +28,9 @@ export class UmbSectionUserPermissionCondition extends UmbControllerBase impleme
}
}
export type UmbSectionUserPermissionConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionUserPermission'> & {
/**
*
*
* @example
* "Umb.Section.Content"
*/
match: string;
export const manifest = {
type: 'condition',
name: 'Section User Permission Condition',
alias: 'Umb.Condition.SectionUserPermission',
api: UmbSectionUserPermissionCondition,
};

View File

@@ -0,0 +1,17 @@
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
export type UmbSectionUserPermissionConditionConfig = UmbConditionConfigBase<'Umb.Condition.SectionUserPermission'> & {
/**
*
*
* @example
* "Umb.Section.Content"
*/
match: string;
};
declare global {
interface UmbExtensionConditionMap {
UmbSectionUserPermissionConditionConfig: UmbSectionUserPermissionConditionConfig;
}
}

View File

@@ -8,3 +8,4 @@ export * from './section-sidebar-menu-with-entity-actions/index.js';
export * from './section-sidebar-menu/index.js';
export * from './section-sidebar/index.js';
export * from './section.context.js';
export type * from './types.js';

View File

@@ -1,19 +1,13 @@
import { UmbSectionUserPermissionCondition } from './conditions/section-user-permission.condition.js';
import { manifest as sectionUserPermissionConditionManifest } from './conditions/section-user-permission.condition.js';
import { manifests as repositoryManifests } from './repository/manifests.js';
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
export const manifests: Array<ManifestTypes> = [
export const manifests: Array<UmbExtensionManifest> = [
{
type: 'modal',
alias: 'Umb.Modal.SectionPicker',
name: 'Section Picker Modal',
element: () => import('./section-picker-modal/section-picker-modal.element.js'),
},
{
type: 'condition',
name: 'Section User Permission Condition',
alias: 'Umb.Condition.SectionUserPermission',
api: UmbSectionUserPermissionCondition,
},
sectionUserPermissionConditionManifest,
...repositoryManifests,
];

View File

@@ -0,0 +1 @@
export type * from './conditions/types.js';

View File

@@ -8,10 +8,9 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import { UMB_SECTION_CONTEXT, UMB_SECTION_SIDEBAR_CONTEXT } from '@umbraco-cms/backoffice/section';
import type { UmbSectionContext, UmbSectionSidebarContext } from '@umbraco-cms/backoffice/section';
import type { ManifestTreeItem } from '@umbraco-cms/backoffice/extension-registry';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import { UMB_ACTION_EVENT_CONTEXT, type UmbActionEventContext } from '@umbraco-cms/backoffice/action';
import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
import {
UmbRequestReloadChildrenOfEntityEvent,
UmbRequestReloadStructureForEntityEvent,
@@ -69,9 +68,9 @@ export abstract class UmbTreeItemContextBase<
readonly foldersOnly = this.#foldersOnly.asObservable();
treeContext?: UmbDefaultTreeContext<TreeItemType, TreeRootType>;
#sectionContext?: UmbSectionContext;
#sectionSidebarContext?: UmbSectionSidebarContext;
#actionEventContext?: UmbActionEventContext;
#sectionContext?: typeof UMB_SECTION_CONTEXT.TYPE;
#sectionSidebarContext?: typeof UMB_SECTION_SIDEBAR_CONTEXT.TYPE;
#actionEventContext?: typeof UMB_ACTION_EVENT_CONTEXT.TYPE;
// TODO: get this from the tree context
#paging = {

View File

@@ -3,7 +3,6 @@ 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/condition/document-user-permission.condition.js';
export interface UmbDocumentDetailModel {
documentType: {

View File

@@ -1,13 +1,10 @@
import { isDocumentUserPermission } from '../utils.js';
import type { UmbDocumentUserPermissionConditionConfig } from './types.js';
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity';
import { observeMultiple } from '@umbraco-cms/backoffice/observable-api';
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
import type {
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition,
} from '@umbraco-cms/backoffice/extension-api';
import type { UmbConditionControllerArguments, UmbExtensionCondition } from '@umbraco-cms/backoffice/extension-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { DocumentPermissionPresentationModel } from '@umbraco-cms/backoffice/external/backend-api';
@@ -109,21 +106,4 @@ export class UmbDocumentUserPermissionCondition
}
}
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<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 { UmbDocumentUserPermissionCondition as api };

View File

@@ -0,0 +1,24 @@
import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api';
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<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>;
};
declare global {
interface UmbExtensionConditionMap {
UmbDocumentUserPermissionConditionConfig: UmbDocumentUserPermissionConditionConfig;
}
}

View File

@@ -17,7 +17,7 @@ import {
UMB_USER_PERMISSION_DOCUMENT_ROLLBACK,
} from './constants.js';
import { manifests as repositoryManifests } from './repository/manifests.js';
import { manifests as conditionManifests } from './condition/manifests.js';
import { manifests as conditionManifests } from './conditions/manifests.js';
import type {
ManifestGranularUserPermission,
ManifestEntityUserPermission,

View File

@@ -1,5 +1,5 @@
import type { UmbUserPermissionModel } from '@umbraco-cms/backoffice/user-permission';
export type * from './conditions/types.js';
export interface UmbDocumentUserPermissionModel extends UmbUserPermissionModel {
// TODO: this should be unique instead of an id, but we currently have now way to map a mixed server response.
document: { id: string };

View File

@@ -1,4 +1,4 @@
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js';
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js';
import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../document-workspace.context-token.js';
import { UMB_USER_PERMISSION_DOCUMENT_UPDATE } from '../../user-permissions/index.js';
import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace';

View File

@@ -3,7 +3,7 @@ import {
UMB_USER_PERMISSION_DOCUMENT_PUBLISH,
UMB_USER_PERMISSION_DOCUMENT_UPDATE,
} from '../../user-permissions/constants.js';
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js';
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbWorkspaceActionBase } from '@umbraco-cms/backoffice/workspace';

View File

@@ -2,7 +2,7 @@ import {
UMB_USER_PERMISSION_DOCUMENT_CREATE,
UMB_USER_PERMISSION_DOCUMENT_UPDATE,
} from '../../user-permissions/constants.js';
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/condition/document-user-permission.condition.js';
import { UmbDocumentUserPermissionCondition } from '../../user-permissions/conditions/document-user-permission.condition.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace';