diff options
| author | 1Step621 <86859447+1STEP621@users.noreply.github.com> | 2024-02-06 16:45:21 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-06 16:45:21 +0900 |
| commit | 74245df3829622a3cc0c880ea710b5c1c4f5c584 (patch) | |
| tree | 3f6f4f1c598f4bd75be6bbfcd1d5deee8daa5adc /packages/frontend/src/scripts | |
| parent | enhance(frontend): KeepAliveのページキャッシュを削除できるよ... (diff) | |
| download | misskey-74245df3829622a3cc0c880ea710b5c1c4f5c584.tar.gz misskey-74245df3829622a3cc0c880ea710b5c1c4f5c584.tar.bz2 misskey-74245df3829622a3cc0c880ea710b5c1c4f5c584.zip | |
Enhance(frontend): フロント側でもリアクション権限のチェックをするように (#13134)
* フロント側でもリアクション権限のチェックをするように
* update CHANGELOG.md
* lint fixes
* remove unrelated diffs
* deny -> reject
denyは「(信用しないことを理由に)拒否する」という意味らしい
* allow -> accept
* EmojiSimpleにlocalOnlyを含めるように
* リアクション権限のない絵文字は打てないように(ダイアログを出すのではなく)
* regenerate type definitions
* lint fix
* remove unused locales
* remove unnecessary async
Diffstat (limited to 'packages/frontend/src/scripts')
| -rw-r--r-- | packages/frontend/src/scripts/check-reaction-permissions.ts | 8 | ||||
| -rw-r--r-- | packages/frontend/src/scripts/reaction-picker.ts | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/packages/frontend/src/scripts/check-reaction-permissions.ts b/packages/frontend/src/scripts/check-reaction-permissions.ts new file mode 100644 index 0000000000..c9d2a5bfc6 --- /dev/null +++ b/packages/frontend/src/scripts/check-reaction-permissions.ts @@ -0,0 +1,8 @@ +import * as Misskey from 'misskey-js'; + +export function checkReactionPermissions(me: Misskey.entities.MeDetailed, note: Misskey.entities.Note, emoji: Misskey.entities.EmojiSimple): boolean { + const roleIdsThatCanBeUsedThisEmojiAsReaction = emoji.roleIdsThatCanBeUsedThisEmojiAsReaction ?? []; + return !(emoji.localOnly && note.user.host !== me.host) + && !(emoji.isSensitive && (note.reactionAcceptance === 'nonSensitiveOnly' || note.reactionAcceptance === 'nonSensitiveOnlyForLocalLikeOnlyForRemote')) + && (roleIdsThatCanBeUsedThisEmojiAsReaction.length === 0 || me.roles.some(role => roleIdsThatCanBeUsedThisEmojiAsReaction.includes(role.id))); +} diff --git a/packages/frontend/src/scripts/reaction-picker.ts b/packages/frontend/src/scripts/reaction-picker.ts index a13351b536..193ac838a2 100644 --- a/packages/frontend/src/scripts/reaction-picker.ts +++ b/packages/frontend/src/scripts/reaction-picker.ts @@ -3,6 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import * as Misskey from 'misskey-js'; import { defineAsyncComponent, Ref, ref } from 'vue'; import { popup } from '@/os.js'; import { defaultStore } from '@/store.js'; @@ -10,6 +11,7 @@ import { defaultStore } from '@/store.js'; class ReactionPicker { private src: Ref<HTMLElement | null> = ref(null); private manualShowing = ref(false); + private targetNote: Ref<Misskey.entities.Note | null> = ref(null); private onChosen?: (reaction: string) => void; private onClosed?: () => void; @@ -23,6 +25,7 @@ class ReactionPicker { src: this.src, pinnedEmojis: reactionsRef, asReactionPicker: true, + targetNote: this.targetNote, manualShowing: this.manualShowing, }, { done: reaction => { @@ -38,8 +41,9 @@ class ReactionPicker { }); } - public show(src: HTMLElement | null, onChosen?: ReactionPicker['onChosen'], onClosed?: ReactionPicker['onClosed']) { + public show(src: HTMLElement | null, targetNote: Misskey.entities.Note | null, onChosen?: ReactionPicker['onChosen'], onClosed?: ReactionPicker['onClosed']) { this.src.value = src; + this.targetNote.value = targetNote; this.manualShowing.value = true; this.onChosen = onChosen; this.onClosed = onClosed; |