|
|
@@ -0,0 +1,71 @@
|
|
|
+const API = require("../../../lib/API")
|
|
|
+const db = require("../../../plugin/DataBase/db")
|
|
|
+const AccessControl = require("../../../lib/AccessControl")
|
|
|
+const { BaseStdResponse } = require("../../../BaseStdResponse")
|
|
|
+
|
|
|
+class SetUserBan extends API {
|
|
|
+ constructor() {
|
|
|
+ super()
|
|
|
+ this.setPath("/Admin/User/SetUserBan")
|
|
|
+ this.setMethod("POST")
|
|
|
+ }
|
|
|
+
|
|
|
+ async onRequest(req, res) {
|
|
|
+ let { uuid, session, userid, is_banned } = req.body
|
|
|
+ const flag = Number(is_banned)
|
|
|
+
|
|
|
+ if ([uuid, session, userid].some(value => value === "" || value === null || value === undefined))
|
|
|
+ return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
|
|
|
+
|
|
|
+ if (![0, 1].includes(flag))
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, msg: "参数错误" })
|
|
|
+
|
|
|
+ if (!await AccessControl.checkSession(uuid, session))
|
|
|
+ return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
|
|
|
+
|
|
|
+ const permission = await AccessControl.getPermission(uuid)
|
|
|
+ if (!permission.includes("admin") && !permission.includes("service"))
|
|
|
+ return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
|
|
|
+
|
|
|
+ if (userid === uuid)
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, msg: "不能封禁自己的账号" })
|
|
|
+
|
|
|
+ const targetRows = await db.query(
|
|
|
+ "SELECT permission FROM users WHERE uuid = ? LIMIT 1",
|
|
|
+ [userid]
|
|
|
+ )
|
|
|
+ if (!targetRows || targetRows.length === 0)
|
|
|
+ return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到用户" })
|
|
|
+
|
|
|
+ const targetPermission = targetRows[0].permission || []
|
|
|
+ if (targetPermission.includes("admin") || targetPermission.includes("service"))
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, msg: "不能封禁管理员或客服账号" })
|
|
|
+
|
|
|
+ const conn = await db.connect()
|
|
|
+ try {
|
|
|
+ const [r] = await conn.execute(
|
|
|
+ "UPDATE users SET is_banned = ? WHERE uuid = ?",
|
|
|
+ [flag, userid]
|
|
|
+ )
|
|
|
+ if (!r || r.affectedRows !== 1)
|
|
|
+ return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到用户或更新失败" })
|
|
|
+
|
|
|
+ if (flag === 1)
|
|
|
+ await AccessControl.invalidateSession(userid)
|
|
|
+
|
|
|
+ return res.json({
|
|
|
+ ...BaseStdResponse.OK,
|
|
|
+ msg: flag === 1 ? "已封禁该用户" : "已解除封禁"
|
|
|
+ })
|
|
|
+ } catch (err) {
|
|
|
+ this.logger.error(`设置用户封禁状态失败: ${err.message || err}`)
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, msg: "操作失败,请稍后再试" })
|
|
|
+ } finally {
|
|
|
+ if (conn?.connection && typeof conn.connection.release === "function" && typeof conn?.release === "function") {
|
|
|
+ conn.release()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports.SetUserBan = SetUserBan
|