diff --git a/console/src/components/permission/HasPermission.vue b/console/src/components/permission/HasPermission.vue
new file mode 100644
index 000000000..ee871618b
--- /dev/null
+++ b/console/src/components/permission/HasPermission.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/console/src/modules/contents/_components/ContributorList.vue b/console/src/modules/contents/_components/ContributorList.vue
new file mode 100644
index 000000000..67dd02769
--- /dev/null
+++ b/console/src/modules/contents/_components/ContributorList.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
diff --git a/console/src/modules/contents/attachments/AttachmentList.vue b/console/src/modules/contents/attachments/AttachmentList.vue
index 0295226d8..47f2a5f00 100644
--- a/console/src/modules/contents/attachments/AttachmentList.vue
+++ b/console/src/modules/contents/attachments/AttachmentList.vue
@@ -356,10 +356,12 @@ onMounted(() => {
}) || []),
]"
/>
-
+
+
+
{
},
}"
class="text-xs text-gray-500"
+ :class="{
+ 'pointer-events-none': !currentUserHasPermission([
+ 'system:users:view',
+ ]),
+ }"
>
{{ attachment.spec.ownerName }}
diff --git a/console/src/modules/contents/comments/CommentList.vue b/console/src/modules/contents/comments/CommentList.vue
index 37797c042..80a230110 100644
--- a/console/src/modules/contents/comments/CommentList.vue
+++ b/console/src/modules/contents/comments/CommentList.vue
@@ -283,10 +283,12 @@ const handleApproveInBatch = async () => {
},
]"
/>
-
+
+
+
-
-
-
+
diff --git a/console/src/modules/contents/pages/SinglePageList.vue b/console/src/modules/contents/pages/SinglePageList.vue
index 2566f77f0..80be4af5e 100644
--- a/console/src/modules/contents/pages/SinglePageList.vue
+++ b/console/src/modules/contents/pages/SinglePageList.vue
@@ -379,10 +379,12 @@ watch(selectedPageNames, (newValue) => {
},
]"
/>
-
+
+
+
{
-
-
-
+
diff --git a/console/src/modules/contents/posts/DeletedPostList.vue b/console/src/modules/contents/posts/DeletedPostList.vue
index 5aa5a0432..c6e07737f 100644
--- a/console/src/modules/contents/posts/DeletedPostList.vue
+++ b/console/src/modules/contents/posts/DeletedPostList.vue
@@ -10,7 +10,6 @@ import {
VPageHeader,
VPagination,
VSpace,
- VAvatar,
VStatusDot,
VEntity,
VEntityField,
@@ -27,6 +26,7 @@ import { usePermission } from "@/utils/permission";
import cloneDeep from "lodash.clonedeep";
import { useQuery } from "@tanstack/vue-query";
import { useI18n } from "vue-i18n";
+import ContributorList from "../_components/ContributorList.vue";
const { currentUserHasPermission } = usePermission();
const { t } = useI18n();
@@ -353,25 +353,7 @@ watch(
-
-
-
+
diff --git a/console/src/modules/contents/posts/PostList.vue b/console/src/modules/contents/posts/PostList.vue
index 9e1285e11..0e622d099 100644
--- a/console/src/modules/contents/posts/PostList.vue
+++ b/console/src/modules/contents/posts/PostList.vue
@@ -393,10 +393,12 @@ watch(selectedPostNames, (newValue) => {
v-model="selectedTag"
:label="$t('core.post.filters.tag.label')"
/>
-
+
+
+
-import { VAvatar, VEntityField } from "@halo-dev/components";
+import { VEntityField } from "@halo-dev/components";
import type { ListedPost } from "@halo-dev/api-client";
+import ContributorList from "@/modules/contents/_components/ContributorList.vue";
withDefaults(
defineProps<{
@@ -13,23 +14,7 @@ withDefaults(
-
-
-
+
diff --git a/console/src/setup/setupComponents.ts b/console/src/setup/setupComponents.ts
index f36ef4796..c00e3d866 100644
--- a/console/src/setup/setupComponents.ts
+++ b/console/src/setup/setupComponents.ts
@@ -11,6 +11,7 @@ import FilterCleanButton from "@/components/filter/FilterCleanButton.vue";
import SearchInput from "@/components/input/SearchInput.vue";
import AnnotationsForm from "@/components/form/AnnotationsForm.vue";
import AttachmentFileTypeIcon from "@/components/icon/AttachmentFileTypeIcon.vue";
+import HasPermission from "@/components/permission/HasPermission.vue";
export function setupComponents(app: App) {
app.use(VueGridLayout);
@@ -37,4 +38,5 @@ export function setupComponents(app: App) {
app.component("SearchInput", SearchInput);
app.component("AnnotationsForm", AnnotationsForm);
app.component("AttachmentFileTypeIcon", AttachmentFileTypeIcon);
+ app.component("HasPermission", HasPermission);
}