diff --git a/ui/src/components/editor/DefaultEditor.vue b/ui/src/components/editor/DefaultEditor.vue
index 9982d4072..8d8a67f32 100644
--- a/ui/src/components/editor/DefaultEditor.vue
+++ b/ui/src/components/editor/DefaultEditor.vue
@@ -17,7 +17,6 @@ import {
ExtensionOrderedList,
ExtensionStrike,
ExtensionText,
- ExtensionImage,
ExtensionTaskList,
ExtensionLink,
ExtensionTextAlign,
@@ -29,8 +28,6 @@ import {
ExtensionHighlight,
ExtensionCommands,
ExtensionIframe,
- ExtensionVideo,
- ExtensionAudio,
ExtensionCodeBlock,
ExtensionFontSize,
ExtensionColor,
@@ -213,10 +210,6 @@ onMounted(() => {
emit("update", html);
}, 250);
- const image = currentUserHasPermission(["uc:attachments:manage"])
- ? UiExtensionImage
- : ExtensionImage;
-
editor.value = new Editor({
content: props.raw,
extensions: [
@@ -239,7 +232,7 @@ onMounted(() => {
ExtensionOrderedList,
ExtensionStrike,
ExtensionText,
- image.configure({
+ UiExtensionImage.configure({
inline: true,
allowBase64: false,
HTMLAttributes: {
@@ -272,16 +265,12 @@ onMounted(() => {
lowlight,
}),
ExtensionIframe,
- currentUserHasPermission(["uc:attachments:manage"])
- ? UiExtensionVideo.configure({
- uploadVideo: props.uploadImage,
- })
- : ExtensionVideo,
- currentUserHasPermission(["uc:attachments:manage"])
- ? UiExtensionAudio.configure({
- uploadAudio: props.uploadImage,
- })
- : ExtensionAudio,
+ UiExtensionVideo.configure({
+ uploadVideo: props.uploadImage,
+ }),
+ UiExtensionAudio.configure({
+ uploadAudio: props.uploadImage,
+ }),
ExtensionCharacterCount,
ExtensionFontSize,
ExtensionColor,
diff --git a/ui/src/components/editor/components/EditorLinkObtain.vue b/ui/src/components/editor/components/EditorLinkObtain.vue
index 9d66200bf..085b9b4ea 100644
--- a/ui/src/components/editor/components/EditorLinkObtain.vue
+++ b/ui/src/components/editor/components/EditorLinkObtain.vue
@@ -10,6 +10,7 @@ import { watch } from "vue";
import { uploadFile } from "../utils/upload";
import type { Attachment } from "@halo-dev/api-client";
import type { AxiosRequestConfig } from "axios";
+import HasPermission from "@/components/permission/HasPermission.vue";
const props = withDefaults(
defineProps<{
@@ -188,22 +189,30 @@ defineExpose({
>
-
- {{ $t("core.common.buttons.upload") }}
-
-
- {{
- $t(
- "core.components.default_editor.extensions.upload.attachment.title"
- )
- }}
+
+
+ {{ $t("core.common.buttons.upload") }}
+
+
+
+
+
+ {{
+ $t(
+ "core.components.default_editor.extensions.upload.attachment.title"
+ )
+ }}
+
+
+
- {{
- $t(
- "core.components.default_editor.extensions.upload.permalink.title"
- )
- }}
+
+ {{
+ $t(
+ "core.components.default_editor.extensions.upload.permalink.title"
+ )
+ }}
+
;
+}
+
+export interface UiImageOptions {
uploadImage?: (
file: File,
options?: AxiosRequestConfig
) => Promise;
}
-const Image = ExtensionImage.extend({
+const Image = ExtensionImage.extend({
addOptions() {
const { parent } = this;
return {
diff --git a/ui/src/components/editor/utils/upload.ts b/ui/src/components/editor/utils/upload.ts
index eb3643b0d..e1bd3b028 100644
--- a/ui/src/components/editor/utils/upload.ts
+++ b/ui/src/components/editor/utils/upload.ts
@@ -5,12 +5,15 @@ import Image from "../extensions/image";
import ExtensionVideo from "../extensions/video";
import ExtensionAudio from "../extensions/audio";
import type { AxiosRequestConfig } from "axios";
+import { usePermission } from "@/utils/permission";
export interface FileProps {
file: File;
editor: CoreEditor;
}
+const { currentUserHasPermission } = usePermission();
+
/**
* Handles file events, determining if the file is an image and triggering the appropriate upload process.
*
@@ -22,6 +25,10 @@ export const handleFileEvent = ({ file, editor }: FileProps) => {
return false;
}
+ if (!currentUserHasPermission(["uc:attachments:manage"])) {
+ return false;
+ }
+
if (file.type.startsWith("image/")) {
uploadImage({ file, editor });
return true;