81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
"""
|
|
创建管理员账号 — 交互式命令行脚本
|
|
|
|
用法:
|
|
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() |