feat: ロールによるコンテンツの操作の制限 (#120)
This commit is contained in:
@@ -51,8 +51,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||
throw new Error('user not found');
|
||||
}
|
||||
|
||||
const policies = await this.roleService.getUserPolicies(user.id);
|
||||
const isModerator = await this.roleService.isModerator(user);
|
||||
const isSilenced = !(await this.roleService.getUserPolicies(user.id)).canPublicNote;
|
||||
const isLimited = !(policies.canCreateContent && policies.canUpdateContent && policies.canDeleteContent);
|
||||
const isSilenced = !policies.canPublicNote;
|
||||
|
||||
const _me = await this.usersRepository.findOneByOrFail({ id: me.id });
|
||||
if (!await this.roleService.isAdministrator(_me) && await this.roleService.isAdministrator(user)) {
|
||||
@@ -80,6 +82,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||
mutingNotificationTypes: profile.mutingNotificationTypes,
|
||||
isModerator: isModerator,
|
||||
isSilenced: isSilenced,
|
||||
isLimited: isLimited,
|
||||
isSuspended: user.isSuspended,
|
||||
lastActiveDate: user.lastActiveDate,
|
||||
moderationNote: profile.moderationNote ?? '',
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['antennas'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['antennas'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['antennas'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -17,6 +17,7 @@ export const meta = {
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:blocks',
|
||||
|
||||
|
@@ -17,6 +17,7 @@ export const meta = {
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:blocks',
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['channels'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:channels',
|
||||
|
||||
|
@@ -14,6 +14,7 @@ export const meta = {
|
||||
requireCredential: true,
|
||||
|
||||
prohibitMoved: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['clips'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['clips'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['account', 'notes', 'clips'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['clip'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['clips'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -14,6 +14,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:drive',
|
||||
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:drive',
|
||||
|
||||
|
@@ -18,6 +18,7 @@ export const meta = {
|
||||
description: 'Request the server to download a new drive file from the specified URL.',
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
kind: 'write:drive',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:drive',
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['drive'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:drive',
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['flash'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['flashs'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:flash',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['flash'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['flash'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['flash'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['gallery'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['gallery'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:gallery',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['gallery'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['gallery'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['gallery'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -7,6 +7,7 @@ import { DI } from '@/di-symbols.js';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
secure: true,
|
||||
} as const;
|
||||
|
@@ -11,6 +11,8 @@ import { ApiError } from '../../error.js';
|
||||
export const meta = {
|
||||
secure: true,
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
limit: {
|
||||
|
@@ -10,6 +10,8 @@ import { ApiError } from '../../error.js';
|
||||
export const meta = {
|
||||
secure: true,
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
limit: {
|
||||
|
@@ -10,6 +10,8 @@ import { ApiError } from '../../error.js';
|
||||
export const meta = {
|
||||
secure: true,
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
limit: {
|
||||
|
@@ -10,7 +10,10 @@ import { ApiError } from '../../error.js';
|
||||
export const meta = {
|
||||
secure: true,
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
limit: {
|
||||
duration: ms('1hour'),
|
||||
max: 1,
|
||||
|
@@ -23,7 +23,10 @@ export const meta = {
|
||||
|
||||
secure: true,
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
limit: {
|
||||
duration: ms('1day'),
|
||||
max: 5,
|
||||
|
@@ -8,6 +8,8 @@ export const meta = {
|
||||
tags: ['account', 'notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
kind: 'write:account',
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['account', 'notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -12,10 +12,11 @@ import { L_CHARS, secureRndstr } from '@/misc/secure-rndstr.js';
|
||||
import { ApiError } from '../../error.js';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
|
||||
secure: true,
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
limit: {
|
||||
duration: ms('1hour'),
|
||||
max: 3,
|
||||
|
@@ -30,6 +30,7 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['webhooks'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['webhooks'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['webhooks'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -11,6 +11,8 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
kind: 'write:mutes',
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:mutes',
|
||||
|
||||
|
@@ -17,6 +17,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:notes',
|
||||
|
||||
|
@@ -12,6 +12,8 @@ export const meta = {
|
||||
tags: ['notes', 'favorites'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
kind: 'write:favorites',
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['notes', 'favorites'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:favorites',
|
||||
|
||||
|
@@ -16,6 +16,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['reactions', 'notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['reactions', 'notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:reactions',
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['notes'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:notes',
|
||||
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['pages'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['pages'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:pages',
|
||||
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['pages'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['pages'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['pages'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -13,6 +13,8 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
kind: 'write:mutes',
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:mutes',
|
||||
|
||||
|
@@ -12,7 +12,10 @@ import { UserListService } from '@/core/UserListService.js';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
res: {
|
||||
type: 'object',
|
||||
optional: false, nullable: false,
|
||||
|
@@ -12,6 +12,7 @@ export const meta = {
|
||||
tags: ['lists'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canCreateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -8,6 +8,7 @@ export const meta = {
|
||||
tags: ['lists'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canDeleteContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -7,6 +7,8 @@ import { DI } from '@/di-symbols.js';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
errors: {
|
||||
noSuchList: {
|
||||
message: 'No such user list.',
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['lists', 'users'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -11,6 +11,7 @@ export const meta = {
|
||||
tags: ['lists', 'users'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
prohibitMoved: true,
|
||||
|
||||
|
@@ -6,6 +6,8 @@ import { DI } from '@/di-symbols.js';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
errors: {
|
||||
noSuchList: {
|
||||
message: 'No such user list.',
|
||||
|
@@ -9,6 +9,7 @@ export const meta = {
|
||||
tags: ['lists'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
@@ -10,6 +10,7 @@ export const meta = {
|
||||
tags: ['account'],
|
||||
|
||||
requireCredential: true,
|
||||
requireRolePolicy: 'canUpdateContent',
|
||||
|
||||
kind: 'write:account',
|
||||
|
||||
|
Reference in New Issue
Block a user