parent
dc9a19b9c7
commit
56d571c0f0
23 changed files with 191 additions and 17 deletions
|
@ -29,6 +29,10 @@ export default (endpoint: string, user: IUser, app: IApp, data: any, file?: any)
|
|||
return rej('YOU_ARE_NOT_ADMIN');
|
||||
}
|
||||
|
||||
if (ep.meta.requireModerator && !user.isAdmin && !user.isModerator) {
|
||||
return rej('YOU_ARE_NOT_MODERATOR');
|
||||
}
|
||||
|
||||
if (app && ep.meta.kind && !app.permission.some(p => p === ep.meta.kind)) {
|
||||
return rej('PERMISSION_DENIED');
|
||||
}
|
||||
|
|
|
@ -30,6 +30,11 @@ export interface IEndpointMeta {
|
|||
*/
|
||||
requireAdmin?: boolean;
|
||||
|
||||
/**
|
||||
* 管理者またはモデレーターのみ使えるエンドポイントか否か
|
||||
*/
|
||||
requireModerator?: boolean;
|
||||
|
||||
/**
|
||||
* エンドポイントのリミテーションに関するやつ
|
||||
* 省略した場合はリミテーションは無いものとして解釈されます。
|
||||
|
|
|
@ -8,7 +8,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
name: {
|
||||
|
|
|
@ -8,7 +8,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
|
|
|
@ -9,7 +9,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
id: {
|
||||
|
|
|
@ -9,7 +9,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
id: {
|
||||
|
|
|
@ -8,7 +8,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {}
|
||||
};
|
||||
|
|
45
src/server/api/endpoints/admin/moderators/add.ts
Normal file
45
src/server/api/endpoints/admin/moderators/add.ts
Normal file
|
@ -0,0 +1,45 @@
|
|||
import $ from 'cafy';
|
||||
import ID, { transform } from '../../../../../misc/cafy-id';
|
||||
import define from '../../../define';
|
||||
import User from '../../../../../models/user';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
'ja-JP': '指定したユーザーをモデレーターにします。',
|
||||
'en-US': 'Mark a user as moderator.'
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
validator: $.type(ID),
|
||||
transform: transform,
|
||||
desc: {
|
||||
'ja-JP': '対象のユーザーID',
|
||||
'en-US': 'The user ID'
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps) => new Promise(async (res, rej) => {
|
||||
const user = await User.findOne({
|
||||
_id: ps.userId
|
||||
});
|
||||
|
||||
if (user == null) {
|
||||
return rej('user not found');
|
||||
}
|
||||
|
||||
await User.update({
|
||||
_id: user._id
|
||||
}, {
|
||||
$set: {
|
||||
isModerator: true
|
||||
}
|
||||
});
|
||||
|
||||
res();
|
||||
}));
|
45
src/server/api/endpoints/admin/moderators/remove.ts
Normal file
45
src/server/api/endpoints/admin/moderators/remove.ts
Normal file
|
@ -0,0 +1,45 @@
|
|||
import $ from 'cafy';
|
||||
import ID, { transform } from '../../../../../misc/cafy-id';
|
||||
import define from '../../../define';
|
||||
import User from '../../../../../models/user';
|
||||
|
||||
export const meta = {
|
||||
desc: {
|
||||
'ja-JP': '指定したユーザーをモデレーター解除します。',
|
||||
'en-US': 'Unmark a user as moderator.'
|
||||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
validator: $.type(ID),
|
||||
transform: transform,
|
||||
desc: {
|
||||
'ja-JP': '対象のユーザーID',
|
||||
'en-US': 'The user ID'
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps) => new Promise(async (res, rej) => {
|
||||
const user = await User.findOne({
|
||||
_id: ps.userId
|
||||
});
|
||||
|
||||
if (user == null) {
|
||||
return rej('user not found');
|
||||
}
|
||||
|
||||
await User.update({
|
||||
_id: user._id
|
||||
}, {
|
||||
$set: {
|
||||
isModerator: false
|
||||
}
|
||||
});
|
||||
|
||||
res();
|
||||
}));
|
|
@ -10,7 +10,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
|
|
|
@ -10,7 +10,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
|
|
|
@ -10,7 +10,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
|
|
|
@ -8,7 +8,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
broadcasts: {
|
||||
|
|
|
@ -10,7 +10,7 @@ export const meta = {
|
|||
},
|
||||
|
||||
requireCredential: true,
|
||||
requireAdmin: true,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
userId: {
|
||||
|
|
|
@ -84,7 +84,7 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
|||
};
|
||||
}
|
||||
|
||||
if (me && me.isAdmin) {
|
||||
if (me && (me.isAdmin || me.isModerator)) {
|
||||
response.hidedTags = instance.hidedTags;
|
||||
response.recaptchaSecretKey = instance.recaptchaSecretKey;
|
||||
response.proxyAccount = instance.proxyAccount;
|
||||
|
|
|
@ -38,7 +38,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
return rej('note not found');
|
||||
}
|
||||
|
||||
if (!user.isAdmin && !note.userId.equals(user._id)) {
|
||||
if (!user.isAdmin && !user.isModerator && !note.userId.equals(user._id)) {
|
||||
return rej('access denied');
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue