diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-08-09 14:41:11 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-09 14:41:11 +0900 |
| commit | b5b79140733a7fe46c446616d03060587cf4919c (patch) | |
| tree | 65d90d7fe945c51c3ebb3ff7e41d1bb8258383fe /packages/frontend/src | |
| parent | fix(backend): prevent run repeatable job immediately (diff) | |
| download | misskey-b5b79140733a7fe46c446616d03060587cf4919c.tar.gz misskey-b5b79140733a7fe46c446616d03060587cf4919c.tar.bz2 misskey-b5b79140733a7fe46c446616d03060587cf4919c.zip | |
enhance: ユーザー検索を制限できるように (#16380)
* enhance: ユーザー検索を制限できるように
* Update Changelog
Diffstat (limited to 'packages/frontend/src')
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.editor.vue | 20 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/roles.vue | 8 | ||||
| -rw-r--r-- | packages/frontend/src/pages/search.vue | 10 | ||||
| -rw-r--r-- | packages/frontend/src/utility/check-permissions.ts | 8 |
4 files changed, 44 insertions, 2 deletions
diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue index c172e22688..bb96a1cde1 100644 --- a/packages/frontend/src/pages/admin/roles.editor.vue +++ b/packages/frontend/src/pages/admin/roles.editor.vue @@ -346,6 +346,26 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canSearchUsers, 'canSearchUsers'])"> + <template #label>{{ i18n.ts._role._options.canSearchUsers }}</template> + <template #suffix> + <span v-if="role.policies.canSearchUsers.useDefault" :class="$style.useDefaultLabel">{{ i18n.ts._role.useBaseValue }}</span> + <span v-else>{{ role.policies.canSearchUsers.value ? i18n.ts.yes : i18n.ts.no }}</span> + <span :class="$style.priorityIndicator"><i :class="getPriorityIcon(role.policies.canSearchUsers)"></i></span> + </template> + <div class="_gaps"> + <MkSwitch v-model="role.policies.canSearchUsers.useDefault" :readonly="readonly"> + <template #label>{{ i18n.ts._role.useBaseValue }}</template> + </MkSwitch> + <MkSwitch v-model="role.policies.canSearchUsers.value" :disabled="role.policies.canSearchUsers.useDefault" :readonly="readonly"> + <template #label>{{ i18n.ts.enable }}</template> + </MkSwitch> + <MkRange v-model="role.policies.canSearchUsers.priority" :min="0" :max="2" :step="1" easing :textConverter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''"> + <template #label>{{ i18n.ts._role.priority }}</template> + </MkRange> + </div> + </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canUseTranslator, 'canUseTranslator'])"> <template #label>{{ i18n.ts._role._options.canUseTranslator }}</template> <template #suffix> diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue index e78a4bbc11..efdf8620ef 100644 --- a/packages/frontend/src/pages/admin/roles.vue +++ b/packages/frontend/src/pages/admin/roles.vue @@ -122,6 +122,14 @@ SPDX-License-Identifier: AGPL-3.0-only </MkSwitch> </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canSearchUsers, 'canSearchUsers'])"> + <template #label>{{ i18n.ts._role._options.canSearchUsers }}</template> + <template #suffix>{{ policies.canSearchUsers ? i18n.ts.yes : i18n.ts.no }}</template> + <MkSwitch v-model="policies.canSearchUsers"> + <template #label>{{ i18n.ts.enable }}</template> + </MkSwitch> + </MkFolder> + <MkFolder v-if="matchQuery([i18n.ts._role._options.canUseTranslator, 'canUseTranslator'])"> <template #label>{{ i18n.ts._role._options.canUseTranslator }}</template> <template #suffix>{{ policies.canUseTranslator ? i18n.ts.yes : i18n.ts.no }}</template> diff --git a/packages/frontend/src/pages/search.vue b/packages/frontend/src/pages/search.vue index b6d21a4616..8d2bf9eb42 100644 --- a/packages/frontend/src/pages/search.vue +++ b/packages/frontend/src/pages/search.vue @@ -15,16 +15,22 @@ SPDX-License-Identifier: AGPL-3.0-only </div> <div v-else-if="tab === 'user'" class="_spacer" style="--MI_SPACER-w: 800px;"> - <XUser v-bind="props"/> + <div v-if="usersSearchAvailable"> + <XUser v-bind="props"/> + </div> + <div v-else> + <MkInfo warn>{{ i18n.ts.usersSearchNotAvailable }}</MkInfo> + </div> </div> </PageWithHeader> </template> <script lang="ts" setup> import { computed, defineAsyncComponent, ref, toRef } from 'vue'; +import { $i } from '@/i.js'; import { i18n } from '@/i18n.js'; import { definePage } from '@/page.js'; -import { notesSearchAvailable } from '@/utility/check-permissions.js'; +import { notesSearchAvailable, usersSearchAvailable } from '@/utility/check-permissions.js'; import MkInfo from '@/components/MkInfo.vue'; const props = withDefaults(defineProps<{ diff --git a/packages/frontend/src/utility/check-permissions.ts b/packages/frontend/src/utility/check-permissions.ts index 2de8fd2cd1..4f55556e0a 100644 --- a/packages/frontend/src/utility/check-permissions.ts +++ b/packages/frontend/src/utility/check-permissions.ts @@ -17,3 +17,11 @@ export const notesSearchAvailable = ( export const canSearchNonLocalNotes = ( instance.noteSearchableScope === 'global' ); + +export const usersSearchAvailable = ( + // FIXME: instance.policies would be null in Vitest + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + ($i == null && instance.policies != null && instance.policies.canSearchUsers) || + ($i != null && $i.policies.canSearchUsers) || + false +); |