4. 多级确认流程
任务目标
设计一个删除数据库的多级确认流程:第一级需要操作者输入数据库名称进行确认;第二级需要管理员输入动态生成的验证码进行二次确认;第三级需要操作者再次输入“DELETE”关键字作为最终确认。三级全部通过后才真正执行删除操作,任何一级失败则终止流程。
核心实现
import secrets
import sys
class MultiLevelConfirm:
def __init__(self, db_name):
self.db_name = db_name
self.admin_code = secrets._hex(3).upper() # 动态验证码
def level1_confirm(self):
"""第一级:操作者输入数据库名称"""
user_input = input(f"请输入要删除的数据库名称({self.db_name})以确认: ").strip()
if user_input != self.db_name:
print("❌ 数据库名称不匹配,流程终止。")
return False
print("✅ 第一级确认通过")
return True
def level2_confirm(self):
"""第二级:管理员输入动态验证码"""
print(f"管理员验证码: {self.admin_code}")
admin_input = input("请输入管理员提供的验证码: ").strip().upper()
if admin_input != self.admin_code:
print("❌ 验证码错误,流程终止。")
return False
print("✅ 第二级确认通过")
return True
def level3_confirm(self):
"""第三级:操作者输入DELETE关键字"""
keyword = input("输入 DELETE 以执行最终确认: ").strip().upper()
if keyword != "DELETE":
print("❌ 关键字错误,流程终止。")
return False
print("✅ 第三级确认通过")
return True
def execute_deletion(self):
"""执行删除操作(模拟)"""
print(f"⚠️ 正在删除数据库: {self.db_name}")
# 实际场景中此处调用数据库删除API
return True
def run(self):
"""按顺序执行三级确认"""
if not self.level1_confirm():
return False
if not self.level2_confirm():
return False
if not self.level3_confirm():
return False
self.execute_deletion()
print("🎉 数据库删除成功")
return True
if __name__ == "__main__":
# 模拟目标数据库
target_db = "customer_db"
confirm = MultiLevelConfirm(target_db)
success = confirm.run()
sys.exit(0 if success else 1)
运行与验证
运行方式:
python multi_level_confirm.py
验证路径:程序启动后按提示依次输入。以下为三种典型场景的预期行为:
- 全部通过:输入
customer_db→ 输入程序显示的管理员验证码 → 输入DELETE,最终输出“数据库删除成功”,退出码为0。 - 中途失败:任一级输入错误(如数据库名拼错、验证码输错、关键字不是DELETE),立即输出对应错误提示并终止,退出码为1,且不会执行删除操作。
- 验证码动态性:每次运行程序,第二级要求的管理员验证码均不同(由
secrets._hex随机生成),防止重放攻击。
通过判定标准:只有三级确认全部通过时,才出现“正在删除数据库”和“数据库删除成功”的输出;任何一级失败时,输出中不得出现这两条消息。退出码0表示成功,1表示流程被拒绝。
关键设计说明
- 权限分离:第一、三级面向操作者,第二级面向管理员,通过动态验证码实现双人授权,避免单点误操作。
- 安全细节:验证码使用
secrets模块生成,适合安全敏感场景;输入比较时对验证码和关键字做大小写归一化,但对数据库名称保持精确匹配。 - 短路终止:任何一级失败立即返回
False,后续级别不会执行,符合“全部通过才执行”的要求。