add recycle bin conditions for media + document root access
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
import type { UmbMenuItemElement } from '../interfaces/menu-item-element.interface.js';
|
||||
import type { ManifestElement } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { ConditionTypes } from '../conditions/types.js';
|
||||
import type { ManifestWithDynamicConditions, ManifestElement } from '@umbraco-cms/backoffice/extension-api';
|
||||
|
||||
export interface ManifestMenuItem extends ManifestElement<UmbMenuItemElement> {
|
||||
export interface ManifestMenuItem
|
||||
extends ManifestElement<UmbMenuItemElement>,
|
||||
ManifestWithDynamicConditions<ConditionTypes> {
|
||||
type: 'menuItem';
|
||||
meta: MetaMenuItem;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import type {
|
||||
UmbConditionConfigBase,
|
||||
UmbConditionControllerArguments,
|
||||
UmbExtensionCondition,
|
||||
} from '@umbraco-cms/backoffice/extension-api';
|
||||
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
|
||||
|
||||
export class UmbAllowDocumentRecycleBinCurrentUserCondition
|
||||
extends UmbConditionBase<UmbConditionConfigBase>
|
||||
implements UmbExtensionCondition
|
||||
{
|
||||
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbConditionConfigBase>) {
|
||||
super(host, args);
|
||||
|
||||
this.consumeContext(UMB_CURRENT_USER_CONTEXT, (context) => {
|
||||
this.observe(context.hasDocumentRootAccess, (hasAccess) => {
|
||||
this.permitted = hasAccess === true;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { UmbAllowDocumentRecycleBinCurrentUserCondition as api };
|
||||
@@ -5,6 +5,12 @@ import { manifests as treeManifests } from './tree/manifests.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const manifests: Array<ManifestTypes> = [
|
||||
{
|
||||
type: 'condition',
|
||||
name: 'Allow Document Recycle Bin Current User Condition',
|
||||
alias: 'Umb.Condition.CurrentUser.AllowDocumentRecycleBin',
|
||||
api: () => import('./allow-document-recycle-bin.condition.js'),
|
||||
},
|
||||
...entityActionManifests,
|
||||
...menuItemManifests,
|
||||
...repositoryManifests,
|
||||
|
||||
@@ -14,6 +14,11 @@ const menuItem: ManifestMenuItemTreeKind = {
|
||||
icon: 'icon-trash',
|
||||
menus: [UMB_CONTENT_MENU_ALIAS],
|
||||
},
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.CurrentUser.AllowDocumentRecycleBin',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const manifests: Array<ManifestTypes> = [menuItem];
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import type {
|
||||
UmbConditionConfigBase,
|
||||
UmbConditionControllerArguments,
|
||||
UmbExtensionCondition,
|
||||
} from '@umbraco-cms/backoffice/extension-api';
|
||||
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
|
||||
|
||||
export class UmbAllowMediaRecycleBinCurrentUserCondition
|
||||
extends UmbConditionBase<UmbConditionConfigBase>
|
||||
implements UmbExtensionCondition
|
||||
{
|
||||
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbConditionConfigBase>) {
|
||||
super(host, args);
|
||||
|
||||
this.consumeContext(UMB_CURRENT_USER_CONTEXT, (context) => {
|
||||
this.observe(context.hasMediaRootAccess, (hasAccess) => {
|
||||
this.permitted = hasAccess === true;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { UmbAllowMediaRecycleBinCurrentUserCondition as api };
|
||||
@@ -5,6 +5,12 @@ import { manifests as treeManifests } from './tree/manifests.js';
|
||||
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const manifests: Array<ManifestTypes> = [
|
||||
{
|
||||
type: 'condition',
|
||||
name: 'Allow Media Recycle Bin Current User Condition',
|
||||
alias: 'Umb.Condition.CurrentUser.AllowMediaRecycleBin',
|
||||
api: () => import('./allow-media-recycle-bin.condition.js'),
|
||||
},
|
||||
...entityActionManifests,
|
||||
...menuItemManifests,
|
||||
...repositoryManifests,
|
||||
|
||||
@@ -14,6 +14,11 @@ const menuItem: ManifestMenuItemTreeKind = {
|
||||
icon: 'icon-trash',
|
||||
menus: [UMB_MEDIA_MENU_ALIAS],
|
||||
},
|
||||
conditions: [
|
||||
{
|
||||
alias: 'Umb.Condition.CurrentUser.AllowMediaRecycleBin',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const manifests: Array<ManifestTypes> = [menuItem];
|
||||
|
||||
@@ -14,6 +14,8 @@ export class UmbCurrentUserContext extends UmbContextBase<UmbCurrentUserContext>
|
||||
|
||||
readonly unique = this.#currentUser.asObservablePart((user) => user?.unique);
|
||||
readonly languageIsoCode = this.#currentUser.asObservablePart((user) => user?.languageIsoCode);
|
||||
readonly hasDocumentRootAccess = this.#currentUser.asObservablePart((user) => user?.hasDocumentRootAccess);
|
||||
readonly hasMediaRootAccess = this.#currentUser.asObservablePart((user) => user?.hasMediaRootAccess);
|
||||
|
||||
#authContext?: typeof UMB_AUTH_CONTEXT.TYPE;
|
||||
#currentUserRepository = new UmbCurrentUserRepository(this);
|
||||
|
||||
@@ -30,20 +30,22 @@ export class UmbCurrentUserServerDataSource {
|
||||
|
||||
if (data) {
|
||||
const user: UmbCurrentUserModel = {
|
||||
unique: data.id,
|
||||
email: data.email,
|
||||
userName: data.userName,
|
||||
name: data.name,
|
||||
languageIsoCode: data.languageIsoCode || 'en-us', // TODO: make global variable
|
||||
documentStartNodeUniques: data.documentStartNodeIds,
|
||||
mediaStartNodeUniques: data.mediaStartNodeIds,
|
||||
avatarUrls: data.avatarUrls,
|
||||
languages: data.languages,
|
||||
hasAccessToAllLanguages: data.hasAccessToAllLanguages,
|
||||
fallbackPermissions: data.fallbackPermissions,
|
||||
permissions: data.permissions,
|
||||
allowedSections: data.allowedSections,
|
||||
avatarUrls: data.avatarUrls,
|
||||
documentStartNodeUniques: data.documentStartNodeIds,
|
||||
email: data.email,
|
||||
fallbackPermissions: data.fallbackPermissions,
|
||||
hasAccessToAllLanguages: data.hasAccessToAllLanguages,
|
||||
hasDocumentRootAccess: data.hasDocumentRootAccess,
|
||||
hasMediaRootAccess: data.hasMediaRootAccess,
|
||||
isAdmin: data.isAdmin,
|
||||
languageIsoCode: data.languageIsoCode || 'en-us', // TODO: make global variable
|
||||
languages: data.languages,
|
||||
mediaStartNodeUniques: data.mediaStartNodeIds,
|
||||
name: data.name,
|
||||
permissions: data.permissions,
|
||||
unique: data.id,
|
||||
userName: data.userName,
|
||||
};
|
||||
return { data: user };
|
||||
}
|
||||
|
||||
@@ -7,20 +7,22 @@ import type {
|
||||
} from '@umbraco-cms/backoffice/external/backend-api';
|
||||
|
||||
export interface UmbCurrentUserModel {
|
||||
unique: string;
|
||||
email: string;
|
||||
userName: string;
|
||||
name: string;
|
||||
languageIsoCode: string;
|
||||
documentStartNodeUniques: Array<string>;
|
||||
mediaStartNodeUniques: Array<string>;
|
||||
avatarUrls: Array<string>;
|
||||
languages: Array<string>;
|
||||
hasAccessToAllLanguages: boolean;
|
||||
allowedSections: Array<string>;
|
||||
avatarUrls: Array<string>;
|
||||
documentStartNodeUniques: Array<string>;
|
||||
email: string;
|
||||
fallbackPermissions: Array<string>;
|
||||
permissions: Array<DocumentPermissionPresentationModel | UnknownTypePermissionPresentationModel>;
|
||||
hasAccessToAllLanguages: boolean;
|
||||
hasDocumentRootAccess: boolean;
|
||||
hasMediaRootAccess: boolean;
|
||||
isAdmin: boolean;
|
||||
languageIsoCode: string;
|
||||
languages: Array<string>;
|
||||
mediaStartNodeUniques: Array<string>;
|
||||
name: string;
|
||||
permissions: Array<DocumentPermissionPresentationModel | UnknownTypePermissionPresentationModel>;
|
||||
unique: string;
|
||||
userName: string;
|
||||
}
|
||||
|
||||
export type UmbCurrentUserMfaProviderModel = UserTwoFactorProviderModel;
|
||||
|
||||
Reference in New Issue
Block a user