forked from mirrors/misskey
fix: サーバー全体のアップロードサイズ上限とロールポリシーのアップロードサイズ上限に関する修正 (#17389)
* fix(backend): ロールポリシーのファイルサイズ制限の上限値をサーバー全体のファイルサイズ制限にする * fix(frontend): サーバー全体のファイルサイズ制限に関する説明を追加 * fix: ベースロールしか与えられていないときにaggregateが走らない問題を修正 今までは問題なかったけど、maxFIleSizeMbで上限capするようになったため
This commit is contained in:
parent
23bb992121
commit
e50603e30b
4 changed files with 15 additions and 2 deletions
|
|
@ -2112,6 +2112,7 @@ _role:
|
|||
driveCapacity: "ドライブ容量"
|
||||
maxFileSize: "アップロード可能な最大ファイルサイズ"
|
||||
maxFileSize_caption: "リバースプロキシやCDNなど、前段で別の設定値が存在する場合があります。"
|
||||
maxFileSize_caption2: "サーバー全体の最大ファイルサイズ設定は {max} です。これより大きいファイルをアップロードできるようにするには、Misskeyの設定ファイルからこの設定を緩和してください。"
|
||||
alwaysMarkNsfw: "ファイルにNSFWを常に付与"
|
||||
canUpdateBioMedia: "アイコンとバナーの更新を許可"
|
||||
pinMax: "ノートのピン留めの最大数"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import type {
|
|||
} from '@/models/_.js';
|
||||
import { MemoryKVCache, MemorySingleCache } from '@/misc/cache.js';
|
||||
import type { MiUser } from '@/models/User.js';
|
||||
import type { Config } from '@/config.js';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import { bindThis } from '@/decorators.js';
|
||||
import { CacheService } from '@/core/CacheService.js';
|
||||
|
|
@ -134,6 +135,9 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
|
|||
constructor(
|
||||
private moduleRef: ModuleRef,
|
||||
|
||||
@Inject(DI.config)
|
||||
private config: Config,
|
||||
|
||||
@Inject(DI.meta)
|
||||
private meta: MiMeta,
|
||||
|
||||
|
|
@ -378,7 +382,7 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
|
|||
const roles = await this.getUserRoles(userId);
|
||||
|
||||
function calc<T extends keyof RolePolicies>(name: T, aggregate: (values: RolePolicies[T][]) => RolePolicies[T]) {
|
||||
if (roles.length === 0) return basePolicies[name];
|
||||
if (roles.length === 0) return aggregate([basePolicies[name]]);
|
||||
|
||||
const policies = roles.map(role => role.policies[name] ?? { priority: 0, useDefault: true });
|
||||
|
||||
|
|
@ -397,6 +401,8 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
|
|||
return 'unavailable';
|
||||
}
|
||||
|
||||
const serverMaxFileSizeMb = Math.floor(this.config.maxFileSize / (1024 * 1024));
|
||||
|
||||
return {
|
||||
gtlAvailable: calc('gtlAvailable', vs => vs.some(v => v === true)),
|
||||
ltlAvailable: calc('ltlAvailable', vs => vs.some(v => v === true)),
|
||||
|
|
@ -414,7 +420,7 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit {
|
|||
canHideAds: calc('canHideAds', vs => vs.some(v => v === true)),
|
||||
canCreateChannel: calc('canCreateChannel', vs => vs.some(v => v === true)),
|
||||
driveCapacityMb: calc('driveCapacityMb', vs => Math.max(...vs)),
|
||||
maxFileSizeMb: calc('maxFileSizeMb', vs => Math.max(...vs)),
|
||||
maxFileSizeMb: calc('maxFileSizeMb', vs => Math.min(serverMaxFileSizeMb, Math.max(...vs))),
|
||||
alwaysMarkNsfw: calc('alwaysMarkNsfw', vs => vs.some(v => v === true)),
|
||||
canUpdateBioMedia: calc('canUpdateBioMedia', vs => vs.some(v => v === true)),
|
||||
pinLimit: calc('pinLimit', vs => Math.max(...vs)),
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<MkInput v-model="valuesModel.maxFileSizeMb" type="number" :disabled="disabled">
|
||||
<template #suffix>MB</template>
|
||||
<template #caption>
|
||||
<div>{{ i18n.tsx._role._options.maxFileSize_caption2({ max: `${Math.floor(instance.maxFileSize / (1024 * 1024))}MB` }) }}</div>
|
||||
<div><i class="ti ti-alert-triangle" style="color: var(--MI_THEME-warn);"></i> {{ i18n.ts._role._options.maxFileSize_caption }}</div>
|
||||
</template>
|
||||
</MkInput>
|
||||
|
|
@ -401,6 +402,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
|
||||
<script lang="ts">
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { instance } from '@/instance.js';
|
||||
|
||||
export type PolicyMeta = {
|
||||
useDefault: boolean;
|
||||
|
|
|
|||
|
|
@ -8137,6 +8137,10 @@ export interface Locale extends ILocale {
|
|||
* リバースプロキシやCDNなど、前段で別の設定値が存在する場合があります。
|
||||
*/
|
||||
"maxFileSize_caption": string;
|
||||
/**
|
||||
* サーバー全体の最大ファイルサイズ設定は {max} です。これより大きいファイルをアップロードできるようにするには、Misskeyの設定ファイルからこの設定を緩和してください。
|
||||
*/
|
||||
"maxFileSize_caption2": ParameterizedString<"max">;
|
||||
/**
|
||||
* ファイルにNSFWを常に付与
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue