diff --git a/web/src/admin/files/FileListPage.ts b/web/src/admin/files/FileListPage.ts index 5f2704a43ed2..75c80ad4a88b 100644 --- a/web/src/admin/files/FileListPage.ts +++ b/web/src/admin/files/FileListPage.ts @@ -3,17 +3,20 @@ import "#elements/buttons/SpinnerButton/index"; import "#elements/forms/DeleteBulkForm"; import "#elements/forms/ModalForm"; import "@patternfly/elements/pf-tooltip/pf-tooltip.js"; +import "#elements/EmptyState"; import { DEFAULT_CONFIG } from "#common/api/config"; +import { docLink } from "#common/global"; +import { WithCapabilitiesConfig } from "#elements/mixins/capabilities"; import { PaginatedResponse, TableColumn } from "#elements/table/Table"; import { TablePage } from "#elements/table/TablePage"; import { SlottedTemplateResult } from "#elements/types"; -import { AdminApi, AdminFileListUsageEnum } from "@goauthentik/api"; +import { AdminApi, AdminFileListUsageEnum, CapabilitiesEnum } from "@goauthentik/api"; import { msg } from "@lit/localize"; -import { html, TemplateResult } from "lit"; +import { html, nothing, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; export interface FileItem { @@ -25,7 +28,7 @@ export interface FileItem { export type FileListOrderKey = "name" | "mimeType"; @customElement("ak-files-list") -export class FileListPage extends TablePage { +export class FileListPage extends WithCapabilitiesConfig(TablePage) { public override checkbox = true; public override clearOnRefresh = true; @@ -67,7 +70,10 @@ export class FileListPage extends TablePage { [msg("Actions"), null, msg("Row Actions")], ]; - renderToolbarSelected(): TemplateResult { + renderToolbarSelected() { + if (!this.can(CapabilitiesEnum.CanSaveMedia)) { + return nothing; + } const disabled = !this.selectedElements.length; const count = this.selectedElements.length; return html` { ]; } - protected renderObjectCreate(): TemplateResult { + protected renderEmpty(inner?: TemplateResult) { + if (this.can(CapabilitiesEnum.CanSaveMedia)) { + return super.renderEmpty(inner); + } + return super.renderEmpty( + html`${msg("Configured file backend does not support file management.")} +
+ ${msg( + "Please ensure the data folder is mounted or S3 storage is configured.", + )} +
+ +
`, + ); + } + + protected renderObjectCreate() { + if (!this.can(CapabilitiesEnum.CanSaveMedia)) { + return nothing; + } return html` ${msg("Upload")} diff --git a/web/src/elements/table/TablePage.ts b/web/src/elements/table/TablePage.ts index 615048cc3eda..8b219d2696dd 100644 --- a/web/src/elements/table/TablePage.ts +++ b/web/src/elements/table/TablePage.ts @@ -1,3 +1,5 @@ +import "#elements/EmptyState"; + import { updateURLParams } from "#elements/router/RouteMatch"; import { Table } from "#elements/table/Table"; import { SlottedTemplateResult } from "#elements/types";