from PDAPI import * import os from Utils.Lib import PermissionVerifier RESOURCE_ROOT = os.path.join(os.path.abspath(os.path.join(os.getcwd(), "resource"))) def _sha1_path(sha1_hex): return os.path.join(RESOURCE_ROOT, sha1_hex[0:2], sha1_hex[2:4], sha1_hex[4:6], sha1_hex) __metadata__ = { "route": "{DEFAULT_ROUTE}/", "methods": ["DELETE"], "blueprint": "GERP", "permission": 3.0, "attributes": [], "limit": "10 per minute", } def HandleRequest(_CleanedData): current_user = UGM.GetELTUser() if not current_user: return {"code": 401, "msg": "未登录"}, 401 if not PermissionVerifier(3.0, ["admin:fileasset_delete"]): return {"code": 403, "msg": "无文件资产删除权限"}, 403 sha1 = _CleanedData["params"].get("sha1", "").strip() if not sha1 or len(sha1) != 40: return {"code": 1, "msg": "无效的SHA1"}, 400 asset = GERPFileAsset.query.filter(GERPFileAsset.FileSHA1 == sha1).first() if not asset: return {"code": 404, "msg": "文件不存在"}, 404 if asset.CompanyUUID: current_role_uuid_str = flask.request.cookies.get("CurrentRoleUUID") if current_role_uuid_str: try: role_uuid_bytes = UUIDObj(current_role_uuid_str).bytes current_role = GERPRole.query.filter(GERPRole.RoleUUID == role_uuid_bytes).first() if not current_role or not current_role.CompanyUUID or current_role.CompanyUUID != asset.CompanyUUID: return {"code": 403, "msg": "无权删除其他公司的文件"}, 403 except: return {"code": 403, "msg": "无权删除此文件"}, 403 else: return {"code": 403, "msg": "无权删除此文件"}, 403 if asset.RefCount > 0: return {"code": 1, "msg": f"文件仍有 {asset.RefCount} 处引用,无法删除"}, 200 file_path = _sha1_path(sha1) try: db.session.delete(asset) db.session.commit() except: db.session.rollback() return {"code": 1, "msg": "数据库删除失败"}, 200 if os.path.exists(file_path): try: os.remove(file_path) except: pass return {"code": 0, "msg": "删除成功"}, 200