From 55c5f7fdb065ace66d0595a54193df1806b61153 Mon Sep 17 00:00:00 2001 From: GrapeApple0 <84321396+GrapeApple0@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:38:23 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=AB=E5=91=A8=E3=82=8A?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/index.d.ts | 4 ++++ locales/ja-JP.yml | 1 + .../src/server/api/endpoints/notes/update.ts | 13 ++++++++++-- .../frontend/src/components/MkNoteHistory.vue | 3 +++ packages/frontend/src/components/MkPoll.vue | 2 +- packages/frontend/src/const.ts | 3 ++- .../frontend/src/pages/admin/roles.editor.vue | 20 +++++++++++++++++++ packages/frontend/src/pages/admin/roles.vue | 12 ++++++++++- 8 files changed, 53 insertions(+), 5 deletions(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index f015a3d503..c2e7fa4891 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -6650,6 +6650,10 @@ export interface Locale extends ILocale { * パブリック投稿の許可 */ "canPublicNote": string; + /** + * ノートの編集の許可 + */ + "canEditNote": string; /** * ノート内の最大メンション数 */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 5f186d1d39..836d85495b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1719,6 +1719,7 @@ _role: gtlAvailable: "グローバルタイムラインの閲覧" ltlAvailable: "ローカルタイムラインの閲覧" canPublicNote: "パブリック投稿の許可" + canEditNote: "ノートの編集の許可" mentionMax: "ノート内の最大メンション数" canInvite: "サーバー招待コードの発行" inviteLimit: "招待コードの作成可能数" diff --git a/packages/backend/src/server/api/endpoints/notes/update.ts b/packages/backend/src/server/api/endpoints/notes/update.ts index 433f20806e..cfa5d12488 100644 --- a/packages/backend/src/server/api/endpoints/notes/update.ts +++ b/packages/backend/src/server/api/endpoints/notes/update.ts @@ -41,6 +41,11 @@ export const meta = { code: 'ACCESS_DENIED', id: 'fe8d7103-0ea8-4ec3-814d-f8b401dc69e9', }, + cannotEditNote: { + message: 'Editing notes are not allowed by the role policy.', + code: 'CANNOT_EDIT_NOTE', + id: '59ece09c-56ab-4bd5-905c-0f6bbf5af143', + }, containsProhibitedWords: { message: 'Cannot post because it contains prohibited words.', code: 'CONTAINS_PROHIBITED_WORDS', @@ -138,8 +143,12 @@ export default class extends Endpoint { }); // この操作を行うのが投稿者とは限らない(例えばモデレーター)ため - if (!await this.roleService.isModerator(me) && (note.userId !== me.id) && (await this.roleService.getUserPolicies(me.id)).canEditNote !== true) { - throw new ApiError(meta.errors.accessDenied); + if (!await this.roleService.isModerator(me)) { + if (note.userId !== me.id) { + throw new ApiError(meta.errors.accessDenied); + } else if ((await this.roleService.getUserPolicies(me.id)).canEditNote !== true) { + throw new ApiError(meta.errors.cannotEditNote); + } } try { diff --git a/packages/frontend/src/components/MkNoteHistory.vue b/packages/frontend/src/components/MkNoteHistory.vue index 8645be9a32..610d1f7082 100644 --- a/packages/frontend/src/components/MkNoteHistory.vue +++ b/packages/frontend/src/components/MkNoteHistory.vue @@ -19,6 +19,9 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+ +