diff --git a/backend/scripts/create_admin.py b/backend/scripts/create_admin.py new file mode 100644 index 0000000..21aee6d --- /dev/null +++ b/backend/scripts/create_admin.py @@ -0,0 +1,81 @@ +""" +创建管理员账号 — 交互式命令行脚本 + +用法: + cd backend + py -3.12 scripts/create_admin.py +""" + +import sys +from pathlib import Path + +# 确保 backend/ 目录在 sys.path 中,使 app.* 导入正常工作 +backend_dir = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(backend_dir)) + +from getpass import getpass + +from sqlmodel import Session, select + +from app.core.security import hash_password +from app.db.session import engine +from app.models.user import User, UserRole + + +def main(): + print("=" * 50) + print(" 军事科技工作台 — 创建管理员账号") + print("=" * 50) + print() + + username = input("请输入用户名: ").strip() + if not username: + print("❌ 用户名不能为空") + sys.exit(1) + + display_name = input("请输入显示名(中文姓名): ").strip() + if not display_name: + print("❌ 显示名不能为空") + sys.exit(1) + + password = getpass("请输入密码(输入不显示): ").strip() + if not password: + print("❌ 密码不能为空") + sys.exit(1) + + password_confirm = getpass("请再次输入密码确认: ").strip() + if password != password_confirm: + print("❌ 两次输入的密码不一致") + sys.exit(1) + + with Session(engine) as session: + # 检查用户名是否已存在 + existing = session.exec( + select(User).where(User.username == username) + ).first() + if existing: + print(f"❌ 用户名「{username}」已存在,请换一个用户名") + sys.exit(1) + + user = User( + username=username, + display_name=display_name, + password_hash=hash_password(password), + role=UserRole.zhipianren, + is_active=True, + ) + session.add(user) + session.commit() + session.refresh(user) + + print() + print("✅ 管理员账号创建成功!") + print(f" 用户名: {user.username}") + print(f" 显示名: {user.display_name}") + print(f" 角色: {user.role.value}(制片人/管理员)") + print(f" ID: {user.id}") + print() + + +if __name__ == "__main__": + main() \ No newline at end of file