DeleteAccount.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. const { insertBindAudit, BindAuditAction, BindAuditSource } = require("../../../lib/Lepao/BindAudit");
  6. class DeleteAccount extends API {
  7. constructor() {
  8. super();
  9. this.setPath('/Lepao/Account')
  10. this.setMethod('DELETE')
  11. }
  12. async onRequest(req, res) {
  13. let { uuid, session, id } = req.body
  14. if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
  15. return res.json({
  16. ...BaseStdResponse.MISSING_PARAMETER
  17. })
  18. // 检查 session
  19. if (!await AccessControl.checkSession(uuid, session))
  20. return res.status(401).json({
  21. ...BaseStdResponse.ACCESS_DENIED
  22. })
  23. let selectSql = 'SELECT student_num, create_user FROM lepao_account WHERE id = ?'
  24. let selectRows = await db.query(selectSql, [id])
  25. if (!selectRows || selectRows.length === 0)
  26. return res.json({
  27. ...BaseStdResponse.ERR,
  28. msg: '解绑账号失败!未找到账户信息'
  29. })
  30. let source = BindAuditSource.USER_API
  31. if (selectRows[0].create_user !== uuid) {
  32. let permission = await AccessControl.getPermission(uuid)
  33. if (!permission.includes("admin") && !permission.includes("service"))
  34. return res.json({
  35. ...BaseStdResponse.ERR,
  36. msg: '解绑账号失败!未找到账户信息'
  37. })
  38. source = permission.includes("admin") ? BindAuditSource.ADMIN_API : BindAuditSource.SERVICE_API
  39. }
  40. let sql = 'UPDATE lepao_account SET create_user = NULL, auto_run = 0 WHERE id = ?'
  41. let r = await db.query(sql, [id])
  42. try {
  43. if (r && r.affectedRows > 0) {
  44. const auditOk = await insertBindAudit({
  45. studentNum: selectRows[0].student_num,
  46. ownerUuid: selectRows[0].create_user,
  47. action: BindAuditAction.PLATFORM_UNBIND,
  48. source,
  49. operatorUuid: uuid,
  50. detail: { via: 'DeleteAccount' },
  51. createdAt: Date.now()
  52. })
  53. if (!auditOk) {
  54. this.logger.warn(`解绑审计写入失败 student_num=${selectRows[0].student_num}`)
  55. }
  56. res.json({
  57. ...BaseStdResponse.OK
  58. })
  59. } else {
  60. return res.json({
  61. ...BaseStdResponse.ERR,
  62. msg: '解绑账号失败!数据库错误'
  63. })
  64. }
  65. } catch (err) {
  66. this.logger.error(`解绑账号失败!${err.stack}`)
  67. res.json({
  68. ...BaseStdResponse.ERR,
  69. msg: "解绑账号失败!",
  70. });
  71. }
  72. }
  73. }
  74. module.exports.DeleteAccount = DeleteAccount