SetUserBan.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const API = require("../../../lib/API")
  2. const db = require("../../../plugin/DataBase/db")
  3. const AccessControl = require("../../../lib/AccessControl")
  4. const { BaseStdResponse } = require("../../../BaseStdResponse")
  5. class SetUserBan extends API {
  6. constructor() {
  7. super()
  8. this.setPath("/Admin/User/SetUserBan")
  9. this.setMethod("POST")
  10. }
  11. async onRequest(req, res) {
  12. let { uuid, session, userid, is_banned } = req.body
  13. const flag = Number(is_banned)
  14. if ([uuid, session, userid].some(value => value === "" || value === null || value === undefined))
  15. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  16. if (![0, 1].includes(flag))
  17. return res.json({ ...BaseStdResponse.ERR, msg: "参数错误" })
  18. if (!await AccessControl.checkSession(uuid, session))
  19. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  20. if (!await AccessControl.canAccess(uuid, ['action.user.ban']))
  21. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  22. if (userid === uuid)
  23. return res.json({ ...BaseStdResponse.ERR, msg: "不能封禁自己的账号" })
  24. const targetRows = await db.query(
  25. "SELECT permission FROM users WHERE uuid = ? LIMIT 1",
  26. [userid]
  27. )
  28. if (!targetRows || targetRows.length === 0)
  29. return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到用户" })
  30. const targetPermission = targetRows[0].permission || []
  31. if (targetPermission.includes("admin") || targetPermission.includes("service"))
  32. return res.json({ ...BaseStdResponse.ERR, msg: "不能封禁管理员或客服账号" })
  33. const conn = await db.connect()
  34. try {
  35. const [r] = await conn.execute(
  36. "UPDATE users SET is_banned = ? WHERE uuid = ?",
  37. [flag, userid]
  38. )
  39. if (!r || r.affectedRows !== 1)
  40. return res.json({ ...BaseStdResponse.MISSING_FILE, msg: "未找到用户或更新失败" })
  41. if (flag === 1)
  42. await AccessControl.invalidateSession(userid)
  43. return res.json({
  44. ...BaseStdResponse.OK,
  45. msg: flag === 1 ? "已封禁该用户" : "已解除封禁"
  46. })
  47. } catch (err) {
  48. this.logger.error(`设置用户封禁状态失败: ${err.message || err}`)
  49. return res.json({ ...BaseStdResponse.ERR, msg: "操作失败,请稍后再试" })
  50. } finally {
  51. if (conn?.connection && typeof conn.connection.release === "function" && typeof conn?.release === "function") {
  52. conn.release()
  53. }
  54. }
  55. }
  56. }
  57. module.exports.SetUserBan = SetUserBan