Role timeline setting (#10677)
* ロールタイムライン設定 * isRoleTimeline to isExplorable * ポリシーではないので削除 * 型からも * wip * 足りてなかった説 * wip * listはpublicを表示 * 前回の記載修正( #10671 ) --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
parent
af738d9ca9
commit
8dc60cd327
10 changed files with 39 additions and 2 deletions
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
-
|
-
|
||||||
- カスタム絵文字のライセンスを複数でセットできるようになりました。
|
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
-
|
-
|
||||||
|
@ -24,6 +23,9 @@
|
||||||
(自分自身に対してもメモを追加できます。)
|
(自分自身に対してもメモを追加できます。)
|
||||||
* ユーザーメニューから追加できます。
|
* ユーザーメニューから追加できます。
|
||||||
(デスクトップ表示ではusernameの右側のボタンからも追加可能)
|
(デスクトップ表示ではusernameの右側のボタンからも追加可能)
|
||||||
|
- ロールタイムラインをロールごとに表示するかどうかの選択できるようになりました。
|
||||||
|
* デフォルトがオフになるので、ロールタイムラインを表示する場合はオンにしてください。
|
||||||
|
- カスタム絵文字のライセンスを複数でセットできるようになりました。
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
- 通知の表示をカスタマイズできるように
|
- 通知の表示をカスタマイズできるように
|
||||||
|
|
|
@ -1291,6 +1291,8 @@ _role:
|
||||||
iconUrl: "アイコン画像のURL"
|
iconUrl: "アイコン画像のURL"
|
||||||
asBadge: "バッジとして表示"
|
asBadge: "バッジとして表示"
|
||||||
descriptionOfAsBadge: "オンにすると、ユーザー名の横にロールのアイコンが表示されます。"
|
descriptionOfAsBadge: "オンにすると、ユーザー名の横にロールのアイコンが表示されます。"
|
||||||
|
isExplorable: "ロールタイムラインを公開"
|
||||||
|
descriptionOfIsExplorable: "オンにすると、ロールのタイムラインを公開します。ロールの公開がオフの場合、タイムラインの公開はされません。"
|
||||||
displayOrder: "表示順"
|
displayOrder: "表示順"
|
||||||
descriptionOfDisplayOrder: "数値が大きいほどUI上で先頭に表示されます。"
|
descriptionOfDisplayOrder: "数値が大きいほどUI上で先頭に表示されます。"
|
||||||
canEditMembersByModerator: "モデレーターのメンバー編集を許可"
|
canEditMembersByModerator: "モデレーターのメンバー編集を許可"
|
||||||
|
|
12
packages/backend/migration/1681870960239-RoleTLSetting.js
Normal file
12
packages/backend/migration/1681870960239-RoleTLSetting.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
export class RoleTLSetting1681870960239 {
|
||||||
|
name = 'RoleTLSetting1681870960239'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "role" ADD "isExplorable" boolean NOT NULL DEFAULT false`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "role" DROP COLUMN "isExplorable"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -59,6 +59,7 @@ export class RoleEntityService {
|
||||||
isPublic: role.isPublic,
|
isPublic: role.isPublic,
|
||||||
isAdministrator: role.isAdministrator,
|
isAdministrator: role.isAdministrator,
|
||||||
isModerator: role.isModerator,
|
isModerator: role.isModerator,
|
||||||
|
isExplorable: role.isExplorable,
|
||||||
asBadge: role.asBadge,
|
asBadge: role.asBadge,
|
||||||
canEditMembersByModerator: role.canEditMembersByModerator,
|
canEditMembersByModerator: role.canEditMembersByModerator,
|
||||||
displayOrder: role.displayOrder,
|
displayOrder: role.displayOrder,
|
||||||
|
|
|
@ -151,6 +151,11 @@ export class Role {
|
||||||
})
|
})
|
||||||
public isAdministrator: boolean;
|
public isAdministrator: boolean;
|
||||||
|
|
||||||
|
@Column('boolean', {
|
||||||
|
default: false,
|
||||||
|
})
|
||||||
|
public isExplorable: boolean;
|
||||||
|
|
||||||
@Column('boolean', {
|
@Column('boolean', {
|
||||||
default: false,
|
default: false,
|
||||||
})
|
})
|
||||||
|
|
|
@ -25,6 +25,7 @@ export const paramDef = {
|
||||||
isPublic: { type: 'boolean' },
|
isPublic: { type: 'boolean' },
|
||||||
isModerator: { type: 'boolean' },
|
isModerator: { type: 'boolean' },
|
||||||
isAdministrator: { type: 'boolean' },
|
isAdministrator: { type: 'boolean' },
|
||||||
|
isExplorable: { type: 'boolean' },
|
||||||
asBadge: { type: 'boolean' },
|
asBadge: { type: 'boolean' },
|
||||||
canEditMembersByModerator: { type: 'boolean' },
|
canEditMembersByModerator: { type: 'boolean' },
|
||||||
displayOrder: { type: 'number' },
|
displayOrder: { type: 'number' },
|
||||||
|
@ -42,6 +43,7 @@ export const paramDef = {
|
||||||
'isPublic',
|
'isPublic',
|
||||||
'isModerator',
|
'isModerator',
|
||||||
'isAdministrator',
|
'isAdministrator',
|
||||||
|
'isExplorable',
|
||||||
'asBadge',
|
'asBadge',
|
||||||
'canEditMembersByModerator',
|
'canEditMembersByModerator',
|
||||||
'displayOrder',
|
'displayOrder',
|
||||||
|
@ -76,6 +78,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
isPublic: ps.isPublic,
|
isPublic: ps.isPublic,
|
||||||
isAdministrator: ps.isAdministrator,
|
isAdministrator: ps.isAdministrator,
|
||||||
isModerator: ps.isModerator,
|
isModerator: ps.isModerator,
|
||||||
|
isExplorable: ps.isExplorable,
|
||||||
asBadge: ps.asBadge,
|
asBadge: ps.asBadge,
|
||||||
canEditMembersByModerator: ps.canEditMembersByModerator,
|
canEditMembersByModerator: ps.canEditMembersByModerator,
|
||||||
displayOrder: ps.displayOrder,
|
displayOrder: ps.displayOrder,
|
||||||
|
|
|
@ -33,6 +33,7 @@ export const paramDef = {
|
||||||
isPublic: { type: 'boolean' },
|
isPublic: { type: 'boolean' },
|
||||||
isModerator: { type: 'boolean' },
|
isModerator: { type: 'boolean' },
|
||||||
isAdministrator: { type: 'boolean' },
|
isAdministrator: { type: 'boolean' },
|
||||||
|
isExplorable: { type: 'boolean' },
|
||||||
asBadge: { type: 'boolean' },
|
asBadge: { type: 'boolean' },
|
||||||
canEditMembersByModerator: { type: 'boolean' },
|
canEditMembersByModerator: { type: 'boolean' },
|
||||||
displayOrder: { type: 'number' },
|
displayOrder: { type: 'number' },
|
||||||
|
@ -85,6 +86,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
isPublic: ps.isPublic,
|
isPublic: ps.isPublic,
|
||||||
isModerator: ps.isModerator,
|
isModerator: ps.isModerator,
|
||||||
isAdministrator: ps.isAdministrator,
|
isAdministrator: ps.isAdministrator,
|
||||||
|
isExplorable: ps.isExplorable,
|
||||||
asBadge: ps.asBadge,
|
asBadge: ps.asBadge,
|
||||||
canEditMembersByModerator: ps.canEditMembersByModerator,
|
canEditMembersByModerator: ps.canEditMembersByModerator,
|
||||||
displayOrder: ps.displayOrder,
|
displayOrder: ps.displayOrder,
|
||||||
|
|
|
@ -65,12 +65,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(meta, paramDef, async (ps, me) => {
|
||||||
const role = await this.rolesRepository.findOneBy({
|
const role = await this.rolesRepository.findOneBy({
|
||||||
id: ps.roleId,
|
id: ps.roleId,
|
||||||
|
isPublic: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
throw new ApiError(meta.errors.noSuchRole);
|
throw new ApiError(meta.errors.noSuchRole);
|
||||||
}
|
}
|
||||||
|
if (!role.isExplorable) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
|
const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
|
||||||
const noteIdsRes = await this.redisClient.xrevrange(
|
const noteIdsRes = await this.redisClient.xrevrange(
|
||||||
`roleTimeline:${role.id}`,
|
`roleTimeline:${role.id}`,
|
||||||
|
|
|
@ -54,6 +54,7 @@ if (props.id) {
|
||||||
target: 'manual',
|
target: 'manual',
|
||||||
condFormula: { id: uuid(), type: 'isRemote' },
|
condFormula: { id: uuid(), type: 'isRemote' },
|
||||||
isPublic: false,
|
isPublic: false,
|
||||||
|
isExplorable: false,
|
||||||
asBadge: false,
|
asBadge: false,
|
||||||
canEditMembersByModerator: false,
|
canEditMembersByModerator: false,
|
||||||
displayOrder: 0,
|
displayOrder: 0,
|
||||||
|
|
|
@ -59,6 +59,11 @@
|
||||||
<template #caption>{{ i18n.ts._role.descriptionOfAsBadge }}</template>
|
<template #caption>{{ i18n.ts._role.descriptionOfAsBadge }}</template>
|
||||||
</MkSwitch>
|
</MkSwitch>
|
||||||
|
|
||||||
|
<MkSwitch v-model="role.isExplorable" :readonly="readonly">
|
||||||
|
<template #label>{{ i18n.ts._role.isExplorable }}</template>
|
||||||
|
<template #caption>{{ i18n.ts._role.descriptionOfIsExplorable }}</template>
|
||||||
|
</MkSwitch>
|
||||||
|
|
||||||
<FormSlot>
|
<FormSlot>
|
||||||
<template #label><i class="ti ti-license"></i> {{ i18n.ts._role.policies }}</template>
|
<template #label><i class="ti ti-license"></i> {{ i18n.ts._role.policies }}</template>
|
||||||
<div class="_gaps_s">
|
<div class="_gaps_s">
|
||||||
|
@ -475,6 +480,7 @@ const save = throttle(100, () => {
|
||||||
isAdministrator: role.isAdministrator,
|
isAdministrator: role.isAdministrator,
|
||||||
isModerator: role.isModerator,
|
isModerator: role.isModerator,
|
||||||
isPublic: role.isPublic,
|
isPublic: role.isPublic,
|
||||||
|
isExplorable: role.isExplorable,
|
||||||
asBadge: role.asBadge,
|
asBadge: role.asBadge,
|
||||||
canEditMembersByModerator: role.canEditMembersByModerator,
|
canEditMembersByModerator: role.canEditMembersByModerator,
|
||||||
policies: role.policies,
|
policies: role.policies,
|
||||||
|
|
Loading…
Reference in a new issue